scanf如何处理标准输入与流水线输入

问题描述 投票:0回答:2

在以下代码中:

#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。

c++ input printf output scanf
2个回答
0
投票

因为\n格式字符串中有一个额外的scanf,它将读取并丢弃所有空格(空格,换行符和制表符,如果存在)。需要指示空格序列的结束,因此您应该按Ctrl-D进行EOF,或者输入另一个让scanf停止的非WS字符。

正如Sid S建议的那样,你可以改变你的格式字符串,如下所示:

scanf(" 0.%[0-9]...", x);

该程序有效,因为当您将其stdin重定向到文件时,scanf将知道它是否到达EOF并终止最后一个输入。从控制台输入时需要手动提供EOF。这就是区别。


0
投票

将第二个scanf()行更改为

scanf(" 0.%[0-9]...", x);
© www.soinside.com 2019 - 2024. All rights reserved.