如何解决这段代码是如何工作的因为我只输入了一个整数?
我试图制作一个只获取整数作为输入的代码。我找到了一个可行的解决方案 here
int n,input,temp,status;
printf("Height:");
status = scanf("%d",&n);
while(status!=1)
{
while((temp=getchar()) != EOF && temp != '\n');
printf("Height:");
status = scanf("%d",&n);
}
我想知道究竟是什么让这部分工作以及那些“额外的隐藏字符”是什么
while((temp=getchar()) != EOF && temp != '\n');
谁能解释一下吗?
解决方法
while((temp=getchar()) != EOF && temp != '\n');
首先,您需要了解getchar函数的作用,即:
C 库函数 int getchar(void) 获取一个字符(一个无符号的 char) 来自标准输入。
返回值 此函数返回读取为无符号字符的字符,转换为 int 或 > EOF 在文件末尾或错误。
当用户输入将由 scanf
选择的内容时,用户按下 [enter]
将发送一个“\n”。 scanf
函数不会读取该换行符,而是保留在输入缓冲区中。 EOF
用于某人明确关闭流的情况,例如按 CTRL-Z。所以代码:
while(status!=1)
{
while((temp=getchar()) != EOF && temp != '\n');
printf("Height:");
status = scanf("%d",&n);
}
首先检查 scanf 的返回类型值:
返回值 成功时,函数返回 参数列表成功读取。如果发生读取错误或 读取时到达文件尾,设置正确的指示器 (feof 或 ferror) 并且,如果任何一个发生在任何数据之前 读取成功,返回EOF。
在您的情况下,您希望读取单个数值 (i.e.,status = scanf("%d",&n);
)。循环的其余部分基本上是要求用户提供有效的输入(ie,一个数值),从而导致 status
为 1
,退出最外层的 while 循环。
如果用户输入了一些非数字输入(例如 foo
而不是整数),则 scanf
will return 0
并离开非数字输入在输入缓冲区中。
因此,下次您调用 scanf
时,它会尝试读取完全相同的非数字输入并再次失败。
循环
while((temp=getchar()) != EOF && temp != '\n');
将逐个字符读取,直到到达文件结尾,或者字符是换行符。循环读取的字符将被忽略并丢弃。
这是一种跳过用户可能输入的所有非数字输入的方法。
,当没有更多输入时接收到 EOF 字符。在输入是从真实文件中读取的情况下,该名称更有意义,而不是用户输入(这是文件的特殊情况)。 这意味着当您收到 EOF 或用户按 Enter 时,您的循环将中断,在这种情况下,您会收到一个 '\n'。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。