本帖最后由 行客 于 2019-1-15 15:07 编辑
首先要留意一个坑:字符数组只有在定义时才能将整个字符串一次性地赋值给它,一旦定义完了,就只能一个字符一个字符地赋值了。
C语言规定,可以将字符串直接赋值给字符数组。我们给字符数组赋值时,我们通常使用这种写法,将字符串一次性地赋值(可以指明数组长度,也可以不指明),而不是一个字符一个字符地赋值,那样做太麻烦了。
但是我刚刚开始就说到了一个坑,后面再想将整个字符串一次性地赋值就不能使用了。也就是:
char str_2[]="abc";
这样的赋值是可以的;但是在其之后再想一次性赋值:
str_2[]="cde";
这样就不可以了,只能
str_2[0]='c';str_2[1]='d';str_2[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[0] = '1'; j=0; }
- else if( str_1 == "2"){ str_2[0] = '2'; j=0; }
- else { cout<<"没有这个选项,请重新输入:" << endl; }
- }
-
- cout << str_2 << endl;
- }
复制代码