switch问题
# include <stdio.h>int main(void)
{
char man;
printf("输入东西:");
while (1)
{
scanf_s("%d", &man);
switch (man)
{
case 'a':
printf("mans");
getchar();
break;
default:
printf("ma");
}
}
return 0;
}
为什么显示屏会出现,
while 之后不用在执行scanf_s 函数吗 在这段代码中,输入的是字符类型的变量man,但是在scanf_s函数中使用了%d,应该使用%c来读取字符类型的输入。同时,在输入字符后,输入缓冲区中仍然存在一个换行符,这个换行符会被下一个scanf函数读取,导致程序出现问题。因此,应该在scanf_s函数之后使用getchar函数来清除输入缓冲区中的换行符。修改后的代码如下:
#include <stdio.h>
int main(void)
{
char man;
printf("输入东西:");
while (1)
{
scanf_s("%c", &man, 1);
getchar(); // 清除输入缓冲区中的换行符
switch (man)
{
case 'a':
printf("mans");
break;
default:
printf("ma");
}
}
return 0;
}
根据你提供的代码,存在以下问题:
1. %d 是用于读取整数的格式控制符,而你想读取字符,应该使用 %c 格式控制符。所以将 scanf_s("%d", &man); 改为 scanf_s("%c", &man);。
2. switch 语句中的 case 'a' 中的 'a' 应该是字符常量,而不是字符串常量,所以应该写成 case 'a':。
3. 在 default 分支中使用 printf("ma"); 应该加上换行符,即 printf("ma\n");。
针对你的问题,即为什么显示屏会出现屏幕截图,这与代码的逻辑无关。可能是你在执行代码时,意外触发了某些截屏快捷键或软件的截屏功能。请确保你在执行代码时没有触发任何截屏操作。
另外,在 while(1) 循环中,你需要在 default 分支中添加合适的退出条件,否则程序将无限循环打印 "ma"。你可以使用一个条件变量(如 int flag = 0;)来控制循环,当条件满足时修改 flag 的值,从而跳出循环。
修改后的代码如下:
#include <stdio.h>
int main(void) {
char man;
printf("输入东西:");
while (1) {
scanf_s("%c", &man);
switch (man) {
case 'a':
printf("mans\n");
getchar();
break;
default:
printf("ma\n");
// 添加退出循环的条件
flag = 1;
}
if (flag == 1) {
break;
}
}
return 0;
}
请注意,在使用 scanf_s 函数时,确保你的编译环境支持该函数,并正确设置了预处理指令。如果出现编译或运行错误,请根据具体的开发环境和编译器进行调整。
如果问题已经解决,请设置最佳答案
页:
[1]