马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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;
}
|