我正在尝试制作一个程序,首先提示用户使用菜单,菜单选项从0到7开始。
我有一个switch语句来检查输入的数字。这个程序还没有完成我开始在“构建列表选项”中,我是用户输入值以将其存储到数组中,当用户输入“-1”时我希望它将-1存储在数组以及存储用户输入的数字。
问题是:在输入“-1”之前,程序不会一直提示用户输入数字。相反,它将显示下一个菜单选项并退出。
#include <stdio.h>
#include <stdlib.h>
#define SIZE 50
void main ()
{
int i = 0;
int userinput[SIZE];
int x = 0;
do
{
printf("===DSCI0====\n");
printf("0. Build List\n");
printf("1. Display List Forward\n");
printf("2. Display List Backwards\n");
printf("3. Insert into list\n");
printf("4. Append into list\n");
printf("5. Obtain from List\n");
printf("6. Clear List\n");
printf("7. Quit\n");
printf("What is your menu option?\n");
scanf("%d", &i);
} while(i < 0 || i > 7);
switch(i)
{
case(0) :
for (x = 0; x < SIZE; x++);
{
printf("Enter a value for ther array (-1 to quit): \n");
scanf("%x", &userinput[x]);
if(userinput[x] == -1)
{
break;
}
}
case(1) : printf("Display List Fwd\n");
break;
case(2) : printf("Display List Bkwd\n");
break;
case(3) : printf("Insert into list\n");
break;
case(4) : printf("Append into list\n");
break;
case(5) : printf("Obtain from list\n");
break;
case(6) : printf("Clear List\n");
break;
case(7) : printf("Good-Bye\n");
exit(0);
break;
default : printf("Enter a value 0-7\n");
exit(0);
break;
}
}
更新
我给出的解决方案帮助我在数组中输入数字。但是,当我尝试读出它时,我没有得到输入的值。
switch(i)
{
case(0) :
for (x = 0; x < SIZE; x++)
{
printf("Enter a value for ther array (-1 to quit): \n");
scanf("%x", &userinput[x]);
if(userinput[x] == -1)
{
break;
}
}
case(1) :
for (x = 0; x < SIZE; x++)
{
printf("[%i.] %i\n", i + 1, &userinput[x]);
if(userinput[x] == -1)
{
break;
}
此示例中的输出是:
What is your menu option?
0
Enter a value for the array (-1 to quit):
0
Enter a value for the array (-1 to quit):
1
Enter a value for the array (-1 to quit):
2
Enter a value for the array (-1 to quit):
3
Enter a value for the array (-1 to quit):
-1
1. 698667216
1. 698667216
1. 698667216
1. 698667216
Display List Bkwd
导致这种情况的原因是什么?
答案 0 :(得分:2)
删除
中的最后一个分号for (x = 0; x < SIZE; x++);
为了将循环后的块放在循环中并让系统迭代块。
然后,在块之后添加break;
进行迭代,以免系统继续显示下一个菜单。
另请注意,您应该在托管环境中使用标准int main(void)
而不是void main()
,这在C89中是非法的,在C99或更高版本中是实现定义的,除非您有一些特殊原因要使用非标准签名。
回答更新的问题:
printf("[%i.] %i\n", i + 1, &userinput[x]);
将调用未定义的行为,因为具有错误类型的数据会传递给printf()
:%i
调用int
,但&userinput[x]
是类型{ {1}}。使用int*
而不使用userinput[x]
来打印数组的内容。