scanf("%s %d %s %d",word1,&num1,word2,&num2);
したがって、ユーザーが「quit」と入力すると、他の 3 つの入力を求めるのをやめるはずです。ただし、おそらく形式に2つの%sがあるため、別の「終了」を入力するように求められます
とにかくこの周りにありますか?編集:終了が入力されない限り、ループで4つの入力を取得する必要があるためです。
scanf("%s %d %s %d",word1,&num1,word2,&num2);
したがって、ユーザーが「quit」と入力すると、他の 3 つの入力を求めるのをやめるはずです。ただし、おそらく形式に2つの%sがあるため、別の「終了」を入力するように求められます
とにかくこの周りにありますか?編集:終了が入力されない限り、ループで4つの入力を取得する必要があるためです。
scanf
構造化されていない入力(人間を含む:-))と話すのが苦手な非常に鈍いツールです。一般に、人と対話している場合は、最初にfgets
行を読んでから、結果の行を離れて選択する必要がありますが、おそらくsscanf
.
%d
整数としてスキャンできないものをディレクティブにフィードすると、ディレクティブがジャムするため、思ったよりも悪いことです。たとえば、 を入力するとquit now
、最初の%s
ディレクティブは単語を読み取りますquit
が、は入力ストリームに残り、1 が返されます (1 回の変換と割り当ての成功)。次に文字列を読み取ろうとすると、;が取得されて消費されます。素朴なコードからすると、これは最初の行の続きではなく、後の 2 番目の入力行のように見えます。%d
now
scanf
now
#include <stdio.h>
#include <string.h>
scanf("%s ", word1);
if (strcmp(word1, "quit") != 0)
scanf("%d %s %d", &num1, word2, &num2);