C和C ++中的负用户输入

时间:2015-03-22 01:44:36

标签: c++ c

我有一个看起来微不足道的问题,但我自己解决了这个问题。这是我的简单代码:

#include <cstdio> 
int main(int argc, char *argv[]){ 
    int z; 
    scanf("%d", &z); 
    for(int i = 0; i < z; ++i){ 
        double x0, x1; 
        scanf("%lf %lf", &x0, &x1); 
        printf("%lf %lf", x0, x1); 
        printf("\n"); 
    }
    return 0;
}

当我在下面提供节目输入时:

4 
1 7 
4 2 
7 1 
−21 −3

我收到了这个输出:

1.000000 7.000000 
4.000000 2.000000 
7.000000 1.000000 
7.000000 1.000000

看起来最后一行根本就没有读过。不过,我确实在其他数据集上测试了我的程序,我做了一些有趣的观察:

1)程序在Ubuntu(在我和朋友的计算机上检查)或ideone上执行时会出现此问题。

2)程序在Windows(我的电脑和朋友)上没有问题。

3)错误可能是由负值引起的,但并非由所有负值引起。

4)使用iostream而不是cstdio并不能解决问题。

1 个答案:

答案 0 :(得分:3)

scanf需要使用ASCII码45( - )的hyphen-minus character

您不小心输入了非ASCII minus sign( - )。