|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
新手求助,现在跟着小甲鱼的课程学到S1E12:switch语句和分支嵌套,这节课了。
现在遇到一个问题
- #include <stdio.h>
- //程序说明:90分及以上A,80~90为B,70~80为C,60~70为D,低于60分为E。此程序是反过来的 。
- int main()
- {
- char name[0];
- char score;
- char a,b;
- int i;
- printf("请输入你的名字:\n");
- scanf("%s",&name);
- getchar();
- printf("请输入你的评级:\n");
- scanf("%c",&score);
- printf("%s同学,",name);
- switch (score)
- {
- case 'A': printf("你的成绩在90分及以上!\n");i = 1;break;
- case 'B': printf("你的成绩在[80,90)\n");i = 1;break;
- case 'C': printf("你的成绩在[70,80)\n");i = 1;break;
- case 'D': printf("你的成绩在[60,70)\n");i = 0;break;
- case 'E': printf("你的成绩在[0,60)\n");i = 0;break;
- default : printf("你输入的是%c,你这是乱输的吧:(\n",score);break;
- }
- //接下来是一个分支嵌套结构
- if(i==1)
- {
- printf("%s同学,你的成绩这么好,能否采访你一下?('y'/'n')",name);
- }
- else
- {
- printf("%s同学,你的成绩这么差,能否采访你一下?('y'/'n')",name);
- }
- getchar();
- scanf("%c",&a);
- if(a == 'Y' || a == 'y')
- {
- getchar();
- printf("很好,请问你是不是帅哥?(y/n)");
- scanf("%c",&b);
- if(b =='Y' || b == 'y')
- {
- printf("好的,%s同学成绩好的原因是:他是帅哥。",name);
- }
- else
- {
- printf("好的,%s同学成绩好的原因是:他不是帅哥。",name);
- }
- }
- else
- {
- printf("那就算了;)");
- }
-
- return 0;
- }
复制代码
运行后的结果是这样的:
请输入你的名字:
FishC
请输入你的评级:
A
FishC同学,你的成绩在90分及以上!
同学,你的成绩这么好,能否采访你一下?('y'/'n')y
很好,请问你是不是帅哥?(y/n)y
好的,同学成绩好的原因是:他是帅哥。
--------------------------------
Process exited after 12.68 seconds with return value 0
请按任意键继续. . .
为什么用了switch后,name变量就变成了。
你的代码中有个小问题,就在定义名字的数组长度上。你定义 char name[0]; 的时候,你给 name 分配的空间是0,所以无法存储用户输入的名字。这会导致后续的错误,因为没有为名字预留足够的空间,所以当你试图访问它时,会得到意料之外的结果,也就是你现在遇到的问题。
解决方法很简单,只需要给 name 分配足够的空间,比如 char name[100]; ,这样就可以存储最多99个字符的名字(最后一个位置留给字符串结束符'\0')。
另外,当你使用scanf函数输入字符串时,不需要在变量前加 "&"。字符串变量的名字已经是一个指向该字符串第一个字符的指针,所以你应该改写为 scanf("%s", name);
这是修改后的代码:
- #include <stdio.h>
- int main()
- {
- char name[100];
- char score;
- char a, b;
- int i;
- printf("请输入你的名字:\n");
- scanf("%s", name);
- getchar();
- printf("请输入你的评级:\n");
- scanf("%c", &score);
- printf("%s同学,", name);
- switch (score)
- {
- case 'A': printf("你的成绩在90分及以上!\n");i = 1;break;
- case 'B': printf("你的成绩在[80,90)\n");i = 1;break;
- case 'C': printf("你的成绩在[70,80)\n");i = 1;break;
- case 'D': printf("你的成绩在[60,70)\n");i = 0;break;
- case 'E': printf("你的成绩在[0,60)\n");i = 0;break;
- default : printf("你输入的是%c,你这是乱输的吧:(\n",score);break;
- }
- if(i==1)
- {
- printf("%s同学,你的成绩这么好,能否采访你一下?('y'/'n')",name);
- }
- else
- {
- printf("%s同学,你的成绩这么差,能否采访你一下?('y'/'n')",name);
- }
- getchar();
- scanf("%c",&a);
- if(a == 'Y' || a == 'y')
- {
- getchar();
- printf("很好,请问你是不是帅哥?(y/n)");
- scanf("%c",&b);
- if(b =='Y' || b == 'y')
- {
- printf("好的,%s同学成绩好的原因是:他是帅哥。",name);
- }
- else
- {
- printf("好的,%s同学成绩好的原因是:他不是帅哥。",name);
- }
- }
- else
- {
- printf("那就算了;)");
- }
-
- return 0;
- }
复制代码
|
|