1
scanf("%s %d %s %d",word1,&num1,word2,&num2);

したがって、ユーザーが「quit」と入力すると、他の 3 つの入力を求めるのをやめるはずです。ただし、おそらく形式に2つの%sがあるため、別の「終了」を入力するように求められます

とにかくこの周りにありますか?編集:終了が入力されない限り、ループで4つの入力を取得する必要があるためです。

4

2 に答える 2

3

scanf構造化されていない入力(人間を含む:-))と話すのが苦手な非常に鈍いツールです。一般に、人と対話している場合は、最初にfgets行を読んでから、結果の行を離れて選択する必要がありますが、おそらくsscanf.

%d整数としてスキャンできないものをディレクティブにフィードすると、ディレクティブがジャムするため、思ったよりも悪いことです。たとえば、 を入力するとquit now、最初の%sディレクティブは単語を読み取りますquitが、は入力ストリームに残り、1 が返されます (1 回の変換と割り当ての成功)。次に文字列を読み取ろうとすると、;が取得されて消費されます。素朴なコードからすると、これは最初の行の続きではなく、後の 2 番目の入力行のように見えます。%dnowscanfnow

于 2013-02-27T19:25:43.883 に答える
2
#include <stdio.h>
#include <string.h>

scanf("%s ", word1);
if (strcmp(word1, "quit") != 0)
    scanf("%d %s %d", &num1, word2, &num2);
于 2013-02-27T19:21:57.960 に答える