此程序从用户读取输入并在数组中存储值,并在用户输入-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;
}
答案 0 :(得分:2)
变量z
和i
在do-while
循环之外声明
int i, z;
但命名相同,新的变量在循环内声明。
do {
int z, i=0;
do-while
循环有一个Block scope。这导致变量的第二个声明有效且没有重新定义,因为它们有自己的范围。循环内z
和i
上的操作操纵循环内声明的变量。
由于循环的控制表达式不在循环的块范围内,因此表达式访问循环之前声明的变量。
因此,“外部”z
和i
变量是“未触及的”,循环永远不会终止并且是“无穷无尽”。
通过删除循环中变量i
和z
的声明并将“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;
}