在以下代码中:
#include <cstdio>
using namespace std;
int N;
char x[110];
int main() {
scanf("%d\n", &N);
while (N--) {
scanf("0.%[0-9]...\n", x);
printf("the digits are 0.%s\n", x);
}
}
当我通过文件使用命令输入输入时
./a.out <“INPUTFILE”
它按预期工作,但当我通过std输入输入输入时,它会延迟printf
函数。
这是为什么?
输入
3 0.1227... 0.517611738... 0.7341231223444344389923899277...
通过文件输出
数字是0.1227 数字是0.517611738 数字是0.7341231223444344389923899277
通过标准输入输出
数字是0.1227 数字是0.517611738
代码来自一本书,竞争性编程3 ch1_02_scanf.cpp。
因为\n
格式字符串中有一个额外的scanf
,它将读取并丢弃所有空格(空格,换行符和制表符,如果存在)。需要指示空格序列的结束,因此您应该按Ctrl-D进行EOF,或者输入另一个让scanf
停止的非WS字符。
正如Sid S建议的那样,你可以改变你的格式字符串,如下所示:
scanf(" 0.%[0-9]...", x);
该程序有效,因为当您将其stdin重定向到文件时,scanf
将知道它是否到达EOF并终止最后一个输入。从控制台输入时需要手动提供EOF。这就是区别。
将第二个scanf()行更改为
scanf(" 0.%[0-9]...", x);