代码不会导致-1

时间:2015-12-10 17:33:12

标签: c++

此程序从用户读取输入并在数组中存储值,并在用户输入-1或条目数达到100时停止。

输入-1时,此代码不会终止。

#include <iostream>

using namespace std;

main (){
    int c [100];
    int i, z;

    do {
      int z, i=0;
      cout << "Enter value the number (-1 to end input): ";
      cin >> z;

        if (z != -1) {
          c[i] = z;  
        }
        i++;
    } while (z != -1 && i < 100);

    cout <<"Total number if positive integer entered by user is: " << i-1;
}

2 个答案:

答案 0 :(得分:2)

变量zido-while循环之外声明

int i, z;

但命名相同,新的变量在循环内声明。

do {
  int z, i=0;

do-while循环有一个Block scope。这导致变量的第二个声明有效且没有重新定义,因为它们有自己的范围。循环内zi上的操作操纵循环内声明的变量。

由于循环的控制表达式不在循环的块范围内,因此表达式访问循环之前声明的变量。
因此,“外部”zi变量是“未触及的”,循环永远不会终止并且是“无穷无尽”。

通过删除循环中变量iz的声明并将“first”i初始化为0,可以简单地解决问题:

#include <iostream>

using namespace std;

main (){
    int c [100];
    int z;
    int i=0;

    do {
      cout << "Enter value the number (-1 to end input): ";
      cin >> z;

        if (z != -1) {
          c[i] = z;  
        }
        i++;
    } while (z != -1 && i < 100);

    cout <<"Total number if positive integer entered by user is: " << i-1;
}

答案 1 :(得分:1)

以下代码可以解决变量范围

的问题
#include<iostream>

using namespace std;

main (){

int c [100];
int i, z;
i = 0;
do {
  cout << "Enter value the number (-1 to end input): ";
  cin >> z;

    if (z != -1) {
      c[i] = z;  
    }
    i++;
} while (z != -1 && i < 100);
cout <<"Total number if positive integer entered by user is: " << i-1;
}