2024 Հեղինակ: Howard Calhoun | [email protected]. Վերջին փոփոխված: 2024-01-17 18:55
Այս հոդվածում scanf() ֆունկցիան դիտարկվում է ընդհանուր ձևով՝ առանց որևէ կոնկրետ ստանդարտի հղումի, ուստի այստեղ ներառված են ցանկացած C99, C11, C++11, C++14 ստանդարտների տվյալները: Հավանաբար, որոշ չափորոշիչներում ֆունկցիան աշխատում է հոդվածում ներկայացված նյութի տարբերությամբ:
scanf C ֆունկցիա - նկարագրություն
scanf()-ը ֆունկցիա է, որը տեղակայված է stdio.h(C) և cstdio(C++) վերնագրի ֆայլերում, որը նաև հայտնի է որպես ֆորմատավորված ծրագրի մուտքագրում: scanf-ը կարդում է նիշերը ստանդարտ մուտքային հոսքից (stdin) և փոխակերպում դրանք ըստ ձևաչափի, այնուհետև գրում է նշված փոփոխականներին: Ձևաչափ - նշանակում է, որ տվյալները ստանալուց հետո փոխակերպվում են որոշակի ձևի: Այսպիսով, scanf C ֆունկցիան նկարագրված է՝
scanf("%format", &variable1[, &variable2, […]), որտեղ փոփոխականները փոխանցվում են որպես հասցեներ: Փոփոխականները ֆունկցիայի փոխանցման այս եղանակի պատճառն ակնհայտ է. աշխատանքի արդյունքում այն վերադարձնում է սխալների առկայությունը ցույց տվող արժեք, ուստի.փոփոխականների արժեքները փոխելու միակ միջոցը հասցեով անցնելն է։ Բացի այդ, այս մեթոդի շնորհիվ ֆունկցիան կարող է մշակել ցանկացած տեսակի տվյալ:
Որոշ ծրագրավորողներ օգտագործում են այնպիսի գործառույթներ, ինչպիսիք են scanf() կամ printf()-ը որպես ընթացակարգեր՝ այլ լեզուների հետ անալոգիայի պատճառով:
Scanf-ը թույլ է տալիս մուտքագրել բոլոր հիմնական լեզուների տեսակները՝ char, int, float, string և այլն: String տիպի փոփոխականների դեպքում կարիք չկա նշել հասցեի նշանը՝ «&», քանի որ տիպի string փոփոխականը զանգված է, իսկ անունը՝ զանգվածի առաջին տարրի հասցեն համակարգչի հիշողության մեջ։.
Տվյալների մուտքագրման ձևաչափ կամ կառավարման տող
Սկսեք դիտելով scanf C ֆունկցիայի օրինակը նկարագրությունից:
include int main() { int x; while (scanf("%d", &x)==1) printf("%d\n", x); վերադարձ 0; // linux համակարգերի պահանջ }
Մուտքային ձևաչափը բաղկացած է հետևյալ չորս պարամետրերից՝ %[width][modifiers] տեսակը: Այս դեպքում «%» նշանը և տեսակը պարտադիր պարամետրեր են: Այսինքն՝ նվազագույն ձևաչափն ունի հետևյալ տեսքը՝ «%s», «%d» և այլն։
Ընդհանուր առմամբ, ֆորմատի տողը կազմող նիշերը բաժանվում են՝
- ձևաչափի ցուցիչներ՝ %;-ով սկսվող ցանկացած բան
- տարանջատող կամ բացատ նիշեր - դրանք space, tab(t), new line (n);
- նիշեր բացի բացատից։
Ֆունկցիան կարող է անվտանգ չլինել:
Օգտագործեք scanf_s()-ի փոխարեն scanf().
(հաղորդագրություն Visual Studio-ից)
Տիպի, կամ ձևաչափի ցուցիչներ, կամ փոխակերպման նիշեր, կամ կառավարման նիշեր
Scanf C հայտարարությունը պետք է պարունակի առնվազն ձևաչափի ցուցիչ, որը նշված է «%»-ով սկսվող արտահայտությունների վերջում: Այն հաղորդում է ծրագրին տվյալների տեսակը, որը պետք է սպասել մուտքագրելիս, սովորաբար ստեղնաշարից: Ստորև բերված աղյուսակում ներկայացված բոլոր ձևաչափերի ցանկը:
Տեսակ | Իմաստ | |
1 | %c |
Ծրագիրը սպասում է նիշերի մուտքագրման: Գրվող փոփոխականը պետք է լինի char տիպի նիշ: |
2 | %d | Ծրագիրը ակնկալում է ամբողջ թվի տիպի տասնորդական թվի մուտքագրում: Փոփոխականը պետք է լինի int տեսակի։ |
3 | %i | Ծրագիրը ակնկալում է ամբողջ թվի տիպի տասնորդական թվի մուտքագրում: Փոփոխականը պետք է լինի int տեսակի։ |
4 | %e, %E | Ծրագիրը ակնկալում է մուտքագրել լողացող կետով (ստորակետ) թիվը էքսպոնենցիալ տեսքով: Փոփոխականը պետք է լինի float տիպի։ |
5 | %f | Ծրագիրը ակնկալում է լողացող կետի համար (ստորակետ): Փոփոխականը պետք է լինի float տիպի։ |
6 | %g, %G | Ծրագիրը ակնկալում է լողացող կետի համար (ստորակետ):Փոփոխականը պետք է լինի float տիպի։ |
7 | %a | Ծրագիրը ակնկալում է լողացող կետի համար (ստորակետ): Փոփոխականը պետք է լինի float տիպի։ |
8 | %o | Ծրագիրը ակնկալում է օկտալ թիվ: Փոփոխականը պետք է լինի int տեսակի։ |
9 | %s | Ծրագիրը սպասում է տողի մուտքագրմանը: Տողը ցանկացած նիշերի հավաքածու է մինչև հանդիպած առաջին բաժանարար նիշը: Փոփոխականը պետք է լինի string տիպի։ |
10 | %x, %X | Ծրագիրը սպասում է տասնվեցական թվի: Փոփոխականը պետք է լինի int տեսակի։ |
11 | %p | Փոփոխականը ակնկալում է ցուցիչի մուտքագրում: Փոփոխականը պետք է լինի ցուցիչի տիպ։ |
12 | %n | Փոփոխականի վրա գրում է մի ամբողջ արժեք, որը հավասար է scanf ֆունկցիայի կողմից մինչ այժմ կարդացված նիշերի քանակին: |
13 | %u | Ծրագիրը կարդում է անստորագիր ամբողջ թիվ: Փոփոխականի տեսակը պետք է լինի անստորագիր ամբողջ թիվ։ |
14 |
%b |
Ծրագիրը սպասում է երկուական թվի: Փոփոխականը պետք է լինի int տեսակի։ |
15 | % | Սկանավորված նիշերի հավաքածու: Ծրագիրը սպասում է նիշերի մուտքագրմանը:քառակուսի փակագծերի միջև նշված սահմանափակ լողավազանից: scanf-ը կաշխատի այնքան ժամանակ, քանի դեռ մուտքային հոսքում կան նշված հավաքածուի նիշեր: |
16 | %% | Ստորագրեք «%»: |
Նիշերը ֆորմատի տողով
Աստղային նշան ()
Աստղանիշը () դրոշակ է, որը ցույց է տալիս, որ հանձնարարական գործողությունը պետք է փակվի: «%» նշանից անմիջապես հետո դրվում է աստղանիշ։ Օրինակ՝
scanf("%d%c%d", &x, &y); //անտեսել նիշը երկու ամբողջ թվերի միջև: scanf ("%s%d%s", str, str2); //անտեսել ամբողջ թիվը երկու տողերի միջև:
Այսինքն, եթե վահանակում մուտքագրեք «45-20» տողը, ծրագիրը կանի հետևյալը.
- «x» փոփոխականին վերագրվելու է 45 արժեքը:
- «y» փոփոխականին վերագրվելու է 20 արժեքը:
- Իսկ մինուս նշանը (գծիկ) «-» անտեսվելու է «%c»-ի շնորհիվ։
Լայնություն (կամ դաշտի լայնություն)
Սա ամբողջ թիվ է «%» նշանի և ձևաչափի ցուցիչի միջև, որը սահմանում է ընթերցման ընթացիկ գործողության ընթացքում ընթերցվող նիշերի առավելագույն քանակը:
scanf("%20s", փող); //կարդա մուտքագրված հոսքի առաջին 20 նիշերը
Կան մի քանի կարևոր բան, որ պետք է հիշել.
- scanf-ը կդադարեցվի, եթե հանդիպի բաժանարար նիշի, նույնիսկ եթե այն չհաշվի 20 նիշ:
- Եթե մուտքագրվում է ավելի քան 20 նիշ, ապա միայն առաջին 20 նիշերը կգրվեն փող.
Փոփոխիչներտեսակը (կամ ճշգրտությունը)
Սրանք հատուկ դրոշակներ են, որոնք փոփոխում են մուտքագրման համար սպասվող տվյալների տեսակը: Դրոշը նշված է տիպի ցուցիչի ձախ կողմում՝
- L կամ l (փոքր L) Երբ «l»-ն օգտագործվում է d, i, o, u, x ցուցիչների հետ, դրոշը ցույց է տալիս ծրագրին, որ ակնկալվում է երկարատև մուտքագրում: Երբ օգտագործում եք «l» e կամ f ցուցիչով, դրոշակն ասում է ծրագրին, որ այն պետք է կրկնակի արժեք ակնկալի: «L»-ի օգտագործումը հաղորդում է ծրագրին, որ սպասվում է երկար կրկնապատկում: «l»-ի օգտագործումը «c» և «s» ցուցիչներով ծրագրին ասում է, որ սպասվում են wchar_t-ի նման երկու բայթ նիշեր: Օրինակ՝ «%lc», «%ls», «%l[asd]»:
- h-ը դրոշակ է, որը ցույց է տալիս կարճ տեսակը:
- hh - ցույց է տալիս, որ փոփոխականը ցուցիչ է դեպի ստորագրված նիշ կամ անստորագիր նիշ արժեք: Դրոշը կարող է օգտագործվել d, i, o, u, x, n բնութագրիչների հետ:
- ll (երկու փոքր L) - ցույց է տալիս, որ փոփոխականը ցուցիչ է նշանավոր long long int կամ անստորագիր long long int տիպի արժեքի նկատմամբ: Դրոշն օգտագործվում է ցուցիչներով՝ d, i, o, u, x, n։
- j - ցույց է տալիս, որ փոփոխականը stdint.h վերնագրի ֆայլից intmax_t կամ uintmax_t տեսակի ցուցիչ է: Օգտագործվում է ցուցիչներով՝ d, i, o, u, x, n։
- z - ցույց է տալիս, որ փոփոխականը ցուցիչ է size_t տեսակի, որի սահմանումը գտնվում է stddef.h-ում: Օգտագործվում է ցուցիչներով՝ d, i, o, u, x, n։
- t - ցույց է տալիս, որ փոփոխականը ptrdiff_t տեսակի ցուցիչ է: Սահմանումը միացված էայս տեսակը գտնվում է stddef.h-ում: Օգտագործվում է ցուցիչներով՝ d, i, o, u, x, n։
Ավելի պարզ, մոդիֆիկատորներով նկարը կարող է ներկայացվել որպես աղյուսակ: Ծրագրավորողների համար scanf C-ի նման նկարագրությունը ավելի պարզ կլինի:
Այլ կերպարներ
Ձևաչափում հանդիպած ցանկացած նիշ կհեռացվի: Միևնույն ժամանակ, պետք է նշել, որ հսկիչ տողի մեջ բացատ կամ բաժանարար նիշերի առկայությունը (նոր տող, բացատ, ներդիր) կարող է հանգեցնել ֆունկցիայի տարբեր վարքագծի։ Մի տարբերակում scanf()-ը կկարդա առանց բաժանարարների որևէ քանակ պահպանելու, մինչև չհանդիպի բաժանարարից տարբեր նիշերի, իսկ մեկ այլ տարբերակում բացատները (միայն դրանք) դեր չեն խաղում և «%d + %d» արտահայտությունը: համարժեք է «% d+%d»-ին։
Օրինակներ
Եկեք նայենք մի քանի օրինակների, որոնք կօգնեն ձեզ մտածել և ավելի լավ հասկանալ, թե ինչպես է գործում գործառույթը:
scanf("%3s", փող); //եթե կոնսոլում մուտքագրեք «1d2s3d1;3» տողը, str scanf-ում կգրվի միայն «1d2» ("%dminus%d", &x, &y); //2 թվերի միջև մինուս նիշերը կհեռացվեն scanf("%5[0-9]", str); // նիշերը մուտքագրվելու են str-ի մեջ այնքան ժամանակ, մինչև 5 նիշ լինի, իսկ նիշերը լինեն 0-ից մինչև 9 թվեր: scanf("%lf", &d); //ակնկալում է կրկնակի մուտքագրում ("%hd", &x); //տիպի ակնկալվող թիվը short scanf("%hu", &y); //ակնկալել անստորագիր թվի կարճ scanf("lx", &z); //տիպի ակնկալվող թիվը երկար int
-իցՍտորև բերված օրինակները ցույց են տալիս, թե ինչպես է փոխվում սպասվող թիվը՝ օգտագործելով տարբեր նշաններ:
scanf C - նկարագրություն սկսնակների համար
Այս բաժինը օգտակար կլինի սկսնակների համար: Հաճախ անհրաժեշտ է ունենալ ոչ այնքան scanf C-ի ամբողջական նկարագրությունը, որքան գործառույթի աշխատանքի մանրամասները:
- Այս հատկությունը որոշ չափով հնացած է: Տարբեր տարբերակների գրադարաններում կան մի քանի տարբեր իրականացումներ: Օրինակ՝ բարելավված scanf S C ֆունկցիան, որի նկարագրությունը կարելի է գտնել microsoft-ի կայքում։
- Ձևաչափի ցուցիչների թիվը պետք է համապատասխանի ֆունկցիային փոխանցված արգումենտների քանակին:
- Մուտքային հոսքի տարրերը պետք է առանձնացվեն միայն բաժանարար նիշերով՝ բացատ, ներդիր, նոր տող: Ստորակետ, կետ-ստորակետ, կետ և այլն. այս նիշերը բաժանող չեն scanf() ֆունկցիայի համար:
- Եթե scanf-ը հանդիպի բաժանարար նիշի, մուտքագրումը կդադարեցվի: Եթե մեկից ավելի փոփոխական կա կարդալու, ապա scanf-ը կանցնի հաջորդ փոփոխականի ընթերցմանը:
- Մուտքային տվյալների ձևաչափի ամենափոքր անհամապատասխանությունը հանգեցնում է ծրագրի անկանխատեսելի արդյունքների: Դե, եթե ծրագիրը պարզապես ավարտվում է սխալով: Բայց հաճախ ծրագիրը շարունակում է աշխատել և սխալ է անում:
- scanf ("%20s…", …); Եթե մուտքագրման հոսքը գերազանցում է 20 նիշը, ապա scanf-ը կկարդա առաջին 20 նիշերը և կամ կդադարեցնի կամ կանցնի հաջորդ փոփոխականի ընթերցմանը, եթե նշված է մեկը: Այս դեպքում սկանավորման հաջորդ կանչը կշարունակի մուտքագրման հոսքի ընթերցումը այն կետից, որտեղ դադարել է սկանավորման նախորդ կանչի աշխատանքը: Եթե առաջին 20-ը կարդալիսնիշեր, սահմանազատող նիշ է հանդիպում, scanf-ը կդադարեցնի կամ կշարունակի կարդալ հաջորդ փոփոխականը, նույնիսկ եթե այն չի կարդացել 20 նիշ առաջին փոփոխականի համար: Այս դեպքում բոլոր չկարդացված նիշերը կկցվեն հաջորդ փոփոխականին:
- Եթե սկանավորված նիշերի հավաքածուն սկսվում է «^»-ով, ապա scanf-ը կկարդա տվյալները այնքան ժամանակ, մինչև չհանդիպի սահմանազատող նիշի կամ հավաքածուի նիշի: Օրինակ, «%[^A-E1-5]»-ը կկարդա տվյալները հոսքից այնքան ժամանակ, մինչև չհանդիպի անգլերենի մեծատառ նիշերից մեկը A-ից մինչև E կամ 1-ից մինչև 5 թվերից մեկը:
- Scanf C ֆունկցիան, ինչպես նկարագրված է, վերադարձնում է մի թիվ, որը հավասար է փոփոխականների գրությունների հաջող թվին: Եթե scanf-ը գրում է 3 փոփոխական, ապա ֆունկցիայի հաջող արդյունքը կվերադարձնի 3 թիվը: Եթե scanf-ը չկարողացավ գրել որևէ փոփոխական, ապա արդյունքը կլինի 0: Եվ, վերջապես, եթե scanf-ն ընդհանրապես չկարողացավ սկսել ինչ-ինչ պատճառներով, արդյունքը կլինի EOF.
- Եթե scanf() ֆունկցիան սխալ է ավարտվել: Օրինակ, scanf("%d", &x) - սպասվում էր մի թիվ, բայց նիշերը ստացվեցին որպես մուտքագրում: Հաջորդ scanf() կանչը կսկսվի մուտքային հոսքի այն կետից, որտեղ ավարտվել է նախորդ ֆունկցիայի կանչը: Այս խնդիրը հաղթահարելու համար անհրաժեշտ է ազատվել խնդրահարույց կերպարներից։ Դա կարելի է անել, օրինակ, զանգահարելով scanf("%s"): Այսինքն՝ ֆունկցիան կկարդա նիշերի շարանը և դեն նետի այն։ Այս բարդ եղանակով դուք կարող եք շարունակել մուտքագրել անհրաժեշտ տվյալները:
- scanf()-ի որոշ ներդրումներում «-»-ը թույլատրված չէ սկանավորված նիշերի հավաքածուում:
- «%c» ցուցիչը կարդում է հոսքի յուրաքանչյուր նիշ: Այսինքն՝ այն նաև կարդում է բաժանարար նիշը։ Սահմանազատող նիշը բաց թողնելու և ցանկալի նիշը կարդալը շարունակելու համար կարող եք օգտագործել «%1s»:
- «c» ցուցիչն օգտագործելիս թույլատրվում է օգտագործել «%10c» լայնությունը, սակայն այնուհետև char տիպի տարրերի զանգվածը որպես փոփոխական պետք է փոխանցվի scanf ֆունկցիային:
- «%[a-z]» նշանակում է «անգլիական այբուբենի բոլոր փոքր տառերը», իսկ «%[z-a]» նշանակում է ընդամենը 3 նիշ՝ «z», «a», «-»: Այլ կերպ ասած, «-» նիշը նշանակում է միջակայք միայն այն դեպքում, եթե այն գտնվում է ճիշտ հերթականությամբ երկու նիշերի միջև: Եթե «-»-ը արտահայտության վերջում է, սկզբում կամ դրանց երկու կողմերում գտնվող նիշերի սխալ հերթականությամբ, ապա դա պարզապես գծիկ է, այլ ոչ թե միջակայք:
Եզրակացություն
Սա եզրափակում է scanf C-ի նկարագրությունը: Սա լավ հարմար հատկություն է փոքր ծրագրերում աշխատելու և ընթացակարգային ծրագրավորման մեթոդի օգտագործման համար: Այնուամենայնիվ, հիմնական թերությունը անկանխատեսելի սխալների քանակն է, որոնք կարող են առաջանալ scanf-ի օգտագործման ժամանակ: Հետևաբար, ծրագրավորման ժամանակ scanf C-ի նկարագրությունը լավագույնս պահվում է ձեր աչքի առաջ: Պրոֆեսիոնալ խոշոր նախագծերում օգտագործվում են iostream-ները, քանի որ դրանք ավելի բարձր մակարդակի հնարավորություններ ունեն, ավելի լավ են կարողանում բռնել և կարգավորել սխալները, ինչպես նաև աշխատել զգալի քանակությամբ տեղեկատվության հետ: Հարկ է նաև նշել, որ scanf C-ի ռուսերեն նկարագրությունը հասանելի է բազմաթիվ ցանցային աղբյուրներում, ինչպես նաև դրա օրինակները.օգտագործել՝ պայմանավորված ֆունկցիայի տարիքով։ Հետևաբար, անհրաժեշտության դեպքում, պատասխանը միշտ կարող եք գտնել թեմատիկ ֆորումներում։
Խորհուրդ ենք տալիս:
Լոլիկի «մեծ մարտիկ». նկարագրություն, բնութագրեր, ակնարկներ
Մեծ ռազմիկ լոլիկի բազմազանությունը բուծվել է մոտ տասը տարի առաջ: Այս ընթացքում այն դարձել է մեծ մրգերով լոլիկի սիրահարների շրջանում տարածված ու պահանջված։ Նրա գերազանց համային հատկությունները անտարբեր չեն թողնի այս բանջարաբոստանային կուլտուրաների գիտակներին:
Tomato Etual. սորտի նկարագրություն, բերքատվություն, լուսանկարներ և ակնարկներ
Լոլիկի արտասովոր սորտերի սիրահարները դրական են արտահայտվում Etoile լոլիկի մասին, որի տարբերակիչ առանձնահատկությունն է պտղի տպավորիչ շերտավորությունը: Այս կառուցվածքի շնորհիվ հասած լոլիկի համատեքստում այն հիշեցնում է վառ ժանյակավոր ծաղիկ։ Որոշելու համար, թե արդյոք արժե այս հետաքրքիր նմուշը տնկել ձեր կայքում, կօգնի այս հոդվածը, որում դուք կգտնեք բույսի նկարագրությունը և դրա աճեցման գաղտնիքները:
Welsumer հավի ցեղատեսակ. նկարագրություն, բովանդակություն, առավելություններ և թերություններ, ակնարկներ
Անձնական կենցաղային հողամասերի համար հավի ցեղատեսակը միշտ չէ, որ ընտրվում է արտադրողականությամբ, ոմանց համար արտաքին տեսքը կարևոր է: Գեղեցիկ է, երբ բակում շրջում են վառ փետրավոր թռչուններ, որոնք հատուկ խնամքի կարիք չունեն։ Նույնիսկ ավելի լավ է, երբ արտաքին գեղեցկությունը զուգորդվում է գերազանց կատարողականությամբ: Այս պահանջները բավարարում են Welzumer ցեղատեսակի հավերը: Նա շատ դրական հատկություններ ունի, այդ իսկ պատճառով նրան հաճախ աճեցնում են մասնավոր բակերում։
Մասնագիտությունը պարֆյումեր. պատմություն, նկարագրություն, ինչպես դառնալ պարֆյումեր
Զգայուն հոտառությունը որոշ մարդկանց համար անեծք է, իսկ մյուսների համար՝ բարիք: Յուրահատուկ տաղանդն առաջին անգամ կիրառություն գտավ օծանելիքի արդյունաբերության հայրենիքում՝ Ֆրանսիայում։ Ի՞նչ պետք է զոհաբերի պարֆյումեր արտադրողը, որպեսզի հոտ քաշի, և որտեղի՞ց կարող է օգտակար լինել «հատուկ» քիթը։
Ապրանքի նկարագրություն. օրինակ, թե ինչպես գրել մանրամասն նկարագրություն, գրել բիզնես պլան
Եթե չկարողացաք գտնել բիզնես պլան՝ նկարագրությամբ, ապրանքի բնութագրերով, որը նախատեսում եք խթանել, ապա պետք է ինքներդ սկսեք այն կազմել: Ի՞նչ բաժիններ է ներառում բիզնես պլանը: Որո՞նք են դրա պատրաստման փուլերը: Եվ վերջապես ինչպե՞ս անկեղծ հետաքրքրություն առաջացնել ներդրողների մոտ։ Այս բոլոր և այլ ոչ պակաս հետաքրքիր հարցեր կքննարկվեն հոդվածում: