int main() {
char one[50]; char two[50];
while (scanf("%10s %10s",one,two) == 2){
printf("%s %s\n",one,two);
}
}
这个功能不让我离开循环
Charanas-MacBook-Pro:Testing zone Charana$ ./a.out
first second
first second
one two
one two
one
two
one two
leave
任何想法如何解决这个问题,以便我可以在转到新行时离开scanf
,或者只在终端输入一个单词而不是两个单词?
答案 0 :(得分:2)
scanf()
功能会在通过%s
读取字符串之前跳过空白区域。换行符是空白区域。因此,它继续读取,直到它获得第二个字符串。与数字相似;如果您要求两个数字,scanf()
将不会停止阅读,直到它获得两个数字,或者它遇到一个不能成为数字一部分的字符 - 它会非常愉快地读取新行。
如果您想要基于行的输入,请不要使用scanf()
;使用标准C或的fgets()
来自POSIX的getline()
,加上
sscanf()
。然后你就可以得到理智的行为。
按照目前的情况,scanf()
功能正在按预期工作;直到它有第二个字符串才会完成。你可以打断程序,但这通常不是你想要的。您可以发出EOF信号(例如,在类Unix平台上键入 Control-D 或在Windows上键入 Control-Z ),但这可能会导致进一步的问题 - 您必须清除例如,在获得进一步输入之前的EOF条件。
使用fgets()
和sscanf()
有很多优点 - 请继续使用。