double value to int variable-意外输出

时间:2013-06-11 16:30:48

标签: c++ int double

这是一段简单的代码。实际上它是一个“填充数组”功能代码。

#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 任何帮助将不胜感激。

2 个答案:

答案 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)使用nexta类型。