在以下代码中:
#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&lt; “INPUTFILE”
它按预期工作,但当我通过std输入输入输入时,它会延迟printf
函数。
为什么?
输入
3
0.1227 ...
0.517611738 ......
0.7341231223444344389923899277 ...
通过文件输出
数字为0.1227
数字是0.517611738
数字是0.7341231223444344389923899277
通过标准输入
输出数字为0.1227
数字是0.517611738
代码来自一本书 commpetitive programminging 3 ch1_02_scanf.cpp 。
答案 0 :(得分:0)
将第二个scanf()行更改为
scanf(" 0.%[0-9]...", x);
答案 1 :(得分:0)
因为\n
格式字符串中有额外的scanf
,它会读取并丢弃所有空格(空格,换行符和制表符,如果存在)。需要指示空格序列的结束,因此您应该按Ctrl-D表示EOF,或输入另一个允许scanf
停止的非WS字符。
正如 Sid S 建议的那样,您可以改变格式字符串,如下所示:
scanf(" 0.%[0-9]...", x);
该程序有效,因为当您将其stdin重定向到文件时,scanf
将知道它是否到达EOF并终止最后一个输入。从控制台输入时需要手动提供EOF。这就是区别。