我正在为游戏制作菜单,当我测试该程序并输入字符或字符串时,该程序将运行默认值,直到永远出现。
我尝试使用strcmp(x,y)函数,但是似乎不适用于我。
int main(void) {
int run = 1;
int choice;
do
{
printf("options: \n1. foo \n2.Bar \n");
scanf("%d", &choice")
switch (choice) {
case 1: printf("hello world \n");
break;
case 2: printf("Hello World \n");
break;
default: printf("enter a valid option");
break;
}
} while (run == 1);
return 0;
}
答案 0 :(得分:1)
如前所述,您永远不会设置 choice ,因此其值是不确定的,其用法是未定义的行为
例如替换
printf("options: \n1. foo \n2.Bar \n");
作者
printf("options: \n1. foo \n2.Bar \n");
if (scanf("%d", &choice) != 1) {
/* not an integer, byppass all up to the newline */
int c;
while ((c = getchar()) != '\n') {
if (c == EOF) {
fprintf(stderr, "EOF");
return -1;
}
}
choice = -1;
}
或更简单地获取字符而不是 int :
char choice;
...
printf("options: \n1. foo \n2.Bar \n");
if (scanf(" %c", &choice) != 1) {
fprintf(stderr, "EOF");
return -1;
}
...
case '1':
...
case '2':
...
请注意%c
之前的空格以绕过空格和换行符,在这种情况下,当然将case 1
替换为case '1'
,将case 2
替换为case '2'
>
始终检查 scanf 的结果,如果您只是执行scanf("%d", &choice);
而用户未输入数字,则您的程序将循环播放而不会结束询问选择并指出错误,因为没有绕过非数字 not ,所以将不再获得输入,因此 scanf 会一直得到它。
也请注意
printf("hello world \n")
do ... while (run == 1);
无法结束,也许您想针对以下情况将 run 设置为0(我的意思是值== 1) 1和2?示例:
#include <stdio.h>
int main(void) {
int run;
char choice;
do
{
run = 0;
puts("options:\n 1. foo \n 2. Bar");
if (scanf(" %c", &choice) != 1) {
fprintf(stderr, "EOF");
return -1;
}
switch (choice) {
case '1':
printf("hello foo\n");
break;
case 2:
printf("Hello bar \n");
break;
default:
run = 1;
puts("enter a valid option");
break;
}
} while (run == 1);
printf("all done with choice %c\n", choice);
return 0;
}
编译和执行:
pi@raspberrypi:/tmp $ gcc -pedantic -Wall -Wextra c.c
pi@raspberrypi:/tmp $ ./a.out
options:
1. foo
2. Bar
a
enter a valid option
options:
1. foo
2. Bar
33
enter a valid option
options:
1. foo
2. Bar
enter a valid option
options:
1. foo
2. Bar
1
hello foo
all done with choice 1
pi@raspberrypi:/tmp $
答案 1 :(得分:0)
打印“ Options:...”后必须添加scanf语句
#include <stdio.h>
int main(void) {
int run = 1;
int choice;
do{
printf("options: \n1. foo \n2.Bar \n");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("hello world \n");
break;
case 2:
printf("Hello World \n");
break;
default:
printf("enter a valid option\n");
break;
}
}while (run == 1);
return 0;
}
如果需要检查输入的值是否是数字,可以使用isdigit()
函数。