C++ 代码不';t在-1上终止

C++ 代码不';t在-1上终止,c++,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 &g

该程序从用户处读取输入并将值存储在数组中,当用户输入-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;
}
#包括
使用名称空间std;
主要(){
INTC[100];
int i,z;
做{
intz,i=0;
cout>z;
如果(z!=-1){
c[i]=z;
}
i++;
}而(z!=-1&&i<100);

cout变量
z
i
do while
循环外声明

int i, z;
但是名称相同的新变量在循环中声明

do {
  int z, i=0;
循环有一个。这会导致变量的第二次声明有效且没有重新定义,因为它们有自己的作用域。在循环内对
z
i
的操作会操作在循环内声明的变量

do {
  int z, i=0;
由于循环的控制表达式不在循环的块范围内,因此该表达式访问在循环之前声明的变量。
因此,“外部”
z
i
变量是“未触及的”,循环永远不会终止并且是“无止境的”

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

#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;
}
#包括
使用名称空间std;
主要(){
INTC[100];
intz;
int i=0;
做{
cout>z;
如果(z!=-1){
c[i]=z;
}
i++;
}而(z!=-1&&i<100);

cout如果变量的范围有问题,下面的代码将起作用

#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;
}
#包括
使用名称空间std;
主要(){
INTC[100];
int i,z;
i=0;
做{
cout>z;
如果(z!=-1){
c[i]=z;
}
i++;
}而(z!=-1&&i<100);

您是否可以再次声明可变z iside循环。int z,i=0->init i=0;循环未终止的唯一原因是
中的条件未满足。那么您是否花时间调查
z
i
的值?存在一个逻辑错误。
i
再次初始化为1 in环路