【发布时间】:2019-07-09 21:52:59
【问题描述】:
我必须编写一个程序,它接受一个由以下空格分隔的值组成的输入:int、long、char、float 和 double,然后在输出的新行中打印每个值。
当我使用 printf 和 scanf 编写程序时,它工作得非常好。
#include<stdio.h>
int main()
{
int a;
long b;
char c;
float d;
double e;
scanf("%d %ld %c %f %lf", &a, &b, &c, &d, &e);
printf("%d\n%ld\n%c\n%f\n%lf", a, b, c, d, e);
return 0;
}
但是当我使用 cin 和 cout 时,出现了一些问题。当 long 输入的数字大于 LONG_MAX 时会发生这种情况。
#include<iostream>
using namespace std;
int main()
{
int intNumber;
long longNumber;
char character;
float floatNumber;
double doubleNumber;
cin>>intNumber>>longNumber>>character>>floatNumber>>doubleNumber;
cout<<intNumber<<"\n"<<longNumber<<"\n"<<character<<"\n"<<floatNumber<<"\n"<<doubleNumber;
return 0;
}
例如,如果输入是211916801 97592151379235457 p 19856.992 -5279235.721231465,那么第一个程序的输出是
211916801
97592151379235457
p
19856.992
-5279235.721231465
但是,第二个节目出来了
211916801
2147483647
╠
-1.07374e+08
-9.25596e+61
这里到底发生了什么?
【问题讨论】:
-
long看起来被视为int。char看起来像是编码问题。printf没有这些问题,因为printf中的格式说明符知道该怎么做。 -
我认为
cin>>在longNumber的输入超出范围后放弃了(假设long对于此编译器是32 位)。尝试初始化变量以查看在cout<<时哪些变量仍具有初始值(并且尚未被cin>>更新)。
标签: c++ input output long-integer