本帖最后由 行客 于 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;
}
|