フォーマットの実際の使用は何ですか"%*"
in scanf()。この形式が存在する場合、その背後に何らかの目的が必要です。次のプログラムは奇妙な出力をします。
#include<stdio.h>
int main()
{
int i;
char str[1024];
printf("Enter text: ");
scanf("%*s", &str);
printf("%s\n", str);
printf("Enter interger: ");
scanf("%*d", &i);
printf("%d\n", i);
return 0;
}
出力:
manav@workstation:~$ gcc -Wall -pedantic d.c
d.c: In function ‘main’:
d.c:8: warning: too many arguments for format
d.c:12: warning: too many arguments for format
manav@manav-workstation:~$ ./a.out
Enter text: manav
D
Enter interger: 12345
372
manav@workstation:~$
Printfの場合、*を使用すると、追加のパラメーターを使用して最小フィールド幅を指定できます。つまり、printf("%*d", 4, 100);
はフィールド幅4を指定します。
scanf
の場合、*はフィールドが読み取られるが無視されることを示します。つまり、入力「12 34」のscanf("%*d %d", &i)
は12を無視し、整数iに34を読み取ります。
星はフラグ文字であり、仕様で読み取られたテキストを無視するように指示します。 glibcのドキュメントから引用するには:
オプションのフラグ文字「*」。この仕様で読み取られたテキストを無視するよう指示します。 scanfは、このフラグを使用する変換仕様を見つけると、変換仕様の残りの指示に従って入力を読み取りますが、この入力を破棄し、ポインター引数を使用せず、成功した割り当てのカウントをインクリメントしません。
仕様文字列に複数の要素が含まれる場合に便利です。例:scanf("%d %*s %d", &i, &j)
for "12 test 34"
-where i&j =は整数であり、残りは無視したいです。
こちら をご覧ください
オプションの開始アスタリスクは、データがstdinから取得されるが無視されることを示します。つまり、対応する引数に保存されません。
_*
_は、変数に入力せずに入力をスキップするために使用されます。したがって、scanf("%*d %d", &i);
は2つの整数を読み取り、2番目の整数をi
に入れます。
コードで出力された値は、初期化されていないi
変数にあった値です-scanf呼び出しはそれを変更しませんでした。
In scanf("%*d",&a)
*
は入力をスキップします。入力を読み取るためには、scanf
で追加の"%d"
を使用する必要があります。例えば:
int a=1,b=2,c=3;
scanf("%d %*d %d",&a,&b,&c); //input is given as: 10 20 30
O/p:
a=10 b=30 and c=3; // 20 is skipped
別の%d
を使用する場合、つまりscanf("%d %*d %d %d",&a,&b,&c); //input is given as: 10 20 30 40
の場合、a = 10 b = 30 c = 40です。
Scanfで","
を使用する場合、%*d
の後に値は取得されません。 scanf("%d %*d,%d" &a,&b,&c)// 10 20 30
O/p:a = 10 b = 2 c = 3が出力されます。