变量作用域问题
我想实现一个选择功能,因此有以下代码#include<iostream>
# include<string>
using namespace std;
void main(){
int j = 1;
string str_1;
while( j){
cin >> str_1;
if ( str_1 == "1"){ char str_2[] = "1"; j=0; }
else if( str_1 == "2"){ char str_2[] = "2"; j=0; }
else { cout<<"没有这个选项,请重新输入:" << endl; }
}
cout << str_2 << endl;
}
但是 cout << str_2 << endl; 报错了, 报错内容为 undeclared identifier
我该如何实现这个功能使得str_2可以被调用?我所使用的IDE是VC6.0。 先初始化一下 本帖最后由 行客 于 2019-1-15 15:07 编辑
首先要留意一个坑:字符数组只有在定义时才能将整个字符串一次性地赋值给它,一旦定义完了,就只能一个字符一个字符地赋值了。
C语言规定,可以将字符串直接赋值给字符数组。我们给字符数组赋值时,我们通常使用这种写法,将字符串一次性地赋值(可以指明数组长度,也可以不指明),而不是一个字符一个字符地赋值,那样做太麻烦了。
但是我刚刚开始就说到了一个坑,后面再想将整个字符串一次性地赋值就不能使用了。也就是:
char str_2[]="abc";
这样的赋值是可以的;但是在其之后再想一次性赋值:
str_2[]="cde";
这样就不可以了,只能
str_2='c';str_2='d';str_2='3';
那么好,我们解决了这个问题,你说的作用域就不是问题了:
while循环内的基本变量的定义的作用域,就在循环体内,而且每次循环都相当于定义作用域结束。否则为什么
#include<iostream>
using namespace std;
void main(){
int i=1;
int i=2; //重复定义,不允许:
//error C2374: 'i' : redefinition; multiple initialization
//see declaration of 'i'
}
这样就提示重复定义,而
#include<iostream>
using namespace std;
void main(){
while(1){
int i=1;
i++;
}
}
就可以正常编译和运行。
所以,while循环体内的变量如果做定义,每次循环都会作用域结束。
好,明白了以上这几点,我们就可以来实现程序啦:
#include<iostream>
# include<string>
using namespace std;
void main(){
int j = 1;
string str_1;
char str_2[]="0"; //循环体外进行数组定义,并赋值初始化
while( j){
cin >> str_1;
if ( str_1 == "1"){ str_2 = '1'; j=0; }
else if( str_1 == "2"){ str_2 = '2'; j=0; }
else { cout<<"没有这个选项,请重新输入:" << endl; }
}
cout << str_2 << endl;
} 本帖最后由 小休克 于 2019-1-15 14:05 编辑
行客 发表于 2019-1-15 13:13
首先要留意一个坑:字符数组只有在定义时才能将整个字符串一次性地赋值给它,一旦定义完了,就只能一个字符 ...
本帖最后由 小休克 于 2019-1-15 14:06 编辑
小休克 发表于 2019-1-15 14:02
我试着运行了一下,str_2 的输出值是“0”而是不是“1”或“2”,我想要str_2输出是“1”或“2”而不是其 ...
页:
[1]