11

次のコードを検討してください。

#include<stdio.h>
int main() {
    int i=3, j=4;
    scanf("%d c %d",&i,&j);
    printf("%d %d",i,j);
    return 0;
}

変数の値を変更する必要がある場合は、入力として or を指定すると機能2c3します2 c 32c 3私が望むのと同じパターンをユーザーに入力してもらいたい場合はどうすれば%dc%dよいでしょ2c3うか?2 c 3%d c %d

4

4 に答える 4

14

フォーマット文字列の空白は、入力の0個以上の空白文字と一致します。

したがって"%d c %d"、数字、空白文字、文字、空白文字の順cに、最後に別の数字が必要です。

"%dc%d"数、、数を期待cします。


*また、フォーマット文字列で使用すると、割り当てが抑制されることに注意してください。
%*c= 1文字を読み取りますが、変数には割り当てないでください。

したがって、ユーザーに次の入力を強制"%d%*c c%*c %d"する場合に使用できます:数字、少なくとも1文字の後に任意の量の空白文字、、少なくとも1文字の後に任意の量の空白文字と数字。c

于 2012-10-11T08:44:35.883 に答える
7

受け入れたいが、受け入れたく1c2ない場合1 c 2は、スペースなしでパターンを使用します。

scanf("%dc%d", &x, &y);

1c2and 1 c 2(および1 \t \t c \t 2etc も)を受け入れたい場合は、スペースを含むパターンを使用します。

scanf("%d c %d", &x, &y);

受け入れたいが受け入れたく1 c 2ない場合は1c2、空白を含む偽の文字列を追加します。

scanf("%d%*[ \t]c%*[ \t]%d", &x, &y);

ここで、フォーマット文字列%[ \t]は「任意の数のスペースとタブ文字を含む文字列を読み取る」ことを意味します。しかし、追加を使用する*と、「任意の数のスペースとタブ文字を含む文字列を期待し、それを破棄する

于 2012-10-11T09:56:11.990 に答える
0

最初に文字列の解析を強制します:

char a[100], b[100];
scanf("%99s c %99s", a, b);

次に、sscanf() を使用して文字列を int に変換します。

于 2012-10-11T08:52:22.317 に答える
0

scanf の結果をさまざまな変数に読み込むと思います (つまりi、 and を再利用しないでくださいj) "%d%s%d"。次に、%s から取得した文字列を確認し、要件に一致する場合は、他の変数を使用して i と j を上書きします。

于 2012-10-11T08:49:08.710 に答える