这是一段简单的代码。实际上它是一个“填充数组”功能代码。
#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。我得到以下输出 1 2 3 4 五 6 6 6 6 6 任何帮助将不胜感激。
答案 0 :(得分:3)
你告诉cin
读取一个整数,这就是它要做的事情 - 它会在看到一个对整数无效的字符时立即停止。在这种情况下,它是'.'
。尝试阅读更多整数将继续失败,在您的情况下将next
保留为其先前的值。
如果要截断浮点值,请读入浮点变量,然后自行进行截断。
double next;
...
a[index] = (int) next;
答案 1 :(得分:2)
当读取整数值(并且您的代码使用int next;
时,任何非整数的内容都会“停止”每次读取其他任何内容的输入。由于next
在此时为6它在输入流中命中'.'
,它继续用该值填充数组,直到它用完空间。
如果您检查输入的状态,例如if(!cin >> next) ... error handling ...;
,您可以检测出错的时间。作为错误处理的一部分,您应该“忽略任何输入,直到空白” - cin.ignore(1000, ' ');
将是一个良好的开端。您还需要重置cin
上的错误标记,以便下次不会出现错误,cin.clear()
会这样做。
如果要输入浮点数,则需要对float
(以及数组double
)使用next
或a
类型。