c中的scanf和换行符
scanf and newlines in c
我今天刚刚在我的 C class 中进行了测试,我有理由相信答案可能不正确。
scanf("%d\n", &x); // Evaluate the expression for the string "54321\n"
这个想法非常简单。求一个整数,将扫描到的数放在整数变量x
对应的内存位置。但是,我不相信对 scanf
的调用会终止。
就我而言,所有对 scanf
到标准 I/O 的调用都会随着按下回车键而终止,因此无需在说明符字符串中包含换行符。事实上,这种冗余只会导致程序在搜索永远不会匹配字符串的内容时停止。
有没有人可以澄清 scanf
函数的技术细节来解决这个问题?
all calls to scanf to standard I/O terminate with the press of the enter key, so there is no need to include the newline in the specifier string.
没错。格式字符串中的 \n
将 忽略 任意数量的空格,包括 "ENTER" 键;因此,您必须输入 non-whitespace 字符才能终止 scanf()
调用。所以,是的,\n
是有问题的。
scanf()
的手册页说:
· A sequence of white-space characters (space, tab, newline,
etc.; see isspace(3)). This directive matches any amount of
white space, including none, in the input.
顺便说一句,scanf()
本身被认为是有问题的:Why does everyone say not to use scanf? What should I use instead?
I don't believe that this call to scanf would ever terminate.
6 个字符输入如"54321\n"
不足以导致此scanf("%d\n", &x);
到return。程序停顿。还必须发生其他事情。
'\n'
指示 scanf()
消耗 white-spaces 并一直消耗到
检测到 a non-white-space。
stdin
已关闭
stdin
出现输入错误(罕见)。
由于 stdin
通常是 行 缓冲,scanf()
以块的形式接收数据。
第一块123进入 不足以导致 scanf("%d\n", &x);
到 return。以上 3 项之一需要发生。
任何输入后的一些non-white-space满足#1,是:
456输入或
xyz输入或
输入输入$输入或...
然后scanf()
将return用1表示一个值,123,被存储在x
中。上面的 4、x 或 $ 是检测到的导致完成的 non-white-space。该字符将是 stdin
.
上后续输入读取的下一个字符
scanf("%d\n", &x);
几乎可以肯定是错误的代码,因为它要求 另一行 用户输入并且不检查其 return 值。
我今天刚刚在我的 C class 中进行了测试,我有理由相信答案可能不正确。
scanf("%d\n", &x); // Evaluate the expression for the string "54321\n"
这个想法非常简单。求一个整数,将扫描到的数放在整数变量x
对应的内存位置。但是,我不相信对 scanf
的调用会终止。
就我而言,所有对 scanf
到标准 I/O 的调用都会随着按下回车键而终止,因此无需在说明符字符串中包含换行符。事实上,这种冗余只会导致程序在搜索永远不会匹配字符串的内容时停止。
有没有人可以澄清 scanf
函数的技术细节来解决这个问题?
all calls to scanf to standard I/O terminate with the press of the enter key, so there is no need to include the newline in the specifier string.
没错。格式字符串中的 \n
将 忽略 任意数量的空格,包括 "ENTER" 键;因此,您必须输入 non-whitespace 字符才能终止 scanf()
调用。所以,是的,\n
是有问题的。
scanf()
的手册页说:
· A sequence of white-space characters (space, tab, newline, etc.; see isspace(3)). This directive matches any amount of white space, including none, in the input.
顺便说一句,scanf()
本身被认为是有问题的:Why does everyone say not to use scanf? What should I use instead?
I don't believe that this call to scanf would ever terminate.
6 个字符输入如"54321\n"
不足以导致此scanf("%d\n", &x);
到return。程序停顿。还必须发生其他事情。
'\n'
指示 scanf()
消耗 white-spaces 并一直消耗到
-
检测到
a non-white-space。
stdin
已关闭stdin
出现输入错误(罕见)。
由于 stdin
通常是 行 缓冲,scanf()
以块的形式接收数据。
第一块123进入 不足以导致 scanf("%d\n", &x);
到 return。以上 3 项之一需要发生。
任何输入后的一些non-white-space满足#1,是:
456输入或
xyz输入或
输入输入$输入或...
然后scanf()
将return用1表示一个值,123,被存储在x
中。上面的 4、x 或 $ 是检测到的导致完成的 non-white-space。该字符将是 stdin
.
scanf("%d\n", &x);
几乎可以肯定是错误的代码,因为它要求 另一行 用户输入并且不检查其 return 值。