对整型变量的双精度值-意外输出
double value to int variable- unexpected output
下面是一段简单的代码。实际上这是一个"填充数组"函数代码。
#include <iostream>
using namespace std;
int main(){
int size = 10; a[10]; numberUsed;
cout << "Enter up to " << size << " nonnegative whole numbers.n"
<< "Mark the end of the list with a negative number.n";
int next, index = 0;
cin >> next;
while ((next >= 0) && (index < size)){
a[index] = next;
index++;
cin >> next;
}
numberUsed = index;
for(int i = 0 ; i < numberUsed -1 ; i++){
cout << a[i] << endl;
}
}
在用户输入整数时工作正常。但是当我输入双精度值时,它应该转换那个特定的值。对下一个输入的整数也重复这个值。那么现在对于输入1 2 3 4 5 6.5 7 8 9 -1,我得到以下输出123.4566666
您告诉cin
读取一个整数,所以这就是它要做的-一旦它看到一个字符对整数无效,它就会停止。在这个例子中是'.'
。尝试读取更多整数将继续失败,在您的情况下,将next
保留在其先前的值。
如果你想截断一个浮点值,读入一个浮点变量,然后自己截断。
double next;
...
a[index] = (int) next;
当读取整数值时(并且您的代码使用int next;
),任何不是整数的东西都将"停止"每次读取其他任何东西的输入。因为当它在输入流中遇到'.'
时,next
是6,所以它继续用该值填充数组,直到它耗尽空间。
如果你检查输入的状态,例如if(!cin >> next) ... error handling ...;
,你可以检测到什么时候出了问题。作为错误处理的一部分,您应该"忽略任何输入,直到出现空格"—cin.ignore(1000, ' ');
将是一个很好的开始。您还需要重置cin
上的错误标志,以便下次不会得到错误,cin.clear()
将这样做。
如果你想输入浮点数,你需要使用float
或double
类型的next
(和数组a
)。
相关文章:
- 字符串比较中的意外输出
- 来自 decltype 的意外输出类型
- 字符数组到十六进制字符串的转换 - 意外输出
- 使用 boost::regex 从目录中获取带有一些正则表达式的文件名称时出现意外输出
- 使用后序遍历递归的深度优先搜索会产生意外输出
- C++的意外输出
- 贝金纳C++练习解决方案的意外输出
- 无效* 转换获得意外输出
- 以下程序的意外输出
- 意外输出:矢量矢量(功率集)
- 基本 int 数组提供意外输出
- 线程的意外输出
- 减法中的意外输出
- 带有左移操作员C 的意外输出
- C strncpy意外输出
- 意外输出..函数绑定在虚拟表中的发生方式
- 星号的意外输出
- 已编译的 protobuf 文件的意外输出路径
- 打印对象矢量的意外输出
- 递归函数用于计算 n 个数字之和的意外输出