C编程,scanf()函数
C programming, scanf() function
scanf 是否在其缓冲区或输入流中放置空格?
如果我说
scanf("%c %d %d", &character, &num1, &num2);
现在说
scanf("%c", &char2);
我知道 enter 会保留在缓冲区中,但空格算吗?
scanf("%c%d%d", &character, &num1, &num2);
这和第一部分有什么不同吗?
还有一件事。
用户按回车键后,我能以某种方式中断 scanf 吗?如果它在 ex 的 num1 之后按回车键。输入:i 5
我能以某种方式让 scanf 在此之后停止,即使它正在等待另一个输入吗?
scanf
格式串中的一个space会消耗任何白色的space(如果有的话);格式说明符 %d
也将忽略实际数字之前的任何白色 space。所以 " %d"
与 "%d"
具有相同的效果。格式说明符 %c
不会忽略白色 space 而是读入它们,因此 " %c"
与 "%c"
不同。在您的情况下,%c
位于 scanf("%c %d %d", ...)
格式字符串的开头与 scanf("%c%d%d", ...)
.
具有相同的效果
如果您想允许在输入所有内容之前退出,我建议您使用 fgets
阅读完整的 "line",然后相应地解析输入,例如使用 sscanf
of strtok
.
scanf 是否在其缓冲区或输入流中放置空格? 如果我说
scanf("%c %d %d", &character, &num1, &num2);
现在说
scanf("%c", &char2);
我知道 enter 会保留在缓冲区中,但空格算吗?
scanf("%c%d%d", &character, &num1, &num2);
这和第一部分有什么不同吗?
还有一件事。 用户按回车键后,我能以某种方式中断 scanf 吗?如果它在 ex 的 num1 之后按回车键。输入:i 5
我能以某种方式让 scanf 在此之后停止,即使它正在等待另一个输入吗?
scanf
格式串中的一个space会消耗任何白色的space(如果有的话);格式说明符 %d
也将忽略实际数字之前的任何白色 space。所以 " %d"
与 "%d"
具有相同的效果。格式说明符 %c
不会忽略白色 space 而是读入它们,因此 " %c"
与 "%c"
不同。在您的情况下,%c
位于 scanf("%c %d %d", ...)
格式字符串的开头与 scanf("%c%d%d", ...)
.
如果您想允许在输入所有内容之前退出,我建议您使用 fgets
阅读完整的 "line",然后相应地解析输入,例如使用 sscanf
of strtok
.