c -读取Array输入,存储值为-1,当输入-1时退出



我正在尝试制作一个程序,首先提示用户一个菜单,菜单选项从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 Listn");
        printf("1. Display List Forwardn");
        printf("2. Display List Backwardsn");
        printf("3. Insert into listn");
        printf("4. Append into listn");
        printf("5. Obtain from Listn");
        printf("6. Clear Listn");
        printf("7. Quitn");
        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 Fwdn");
                        break;
       case(2) : printf("Display List Bkwdn");
                        break;
        case(3) : printf("Insert into listn");
                        break;
        case(4) : printf("Append into listn");
                        break;
        case(5) : printf("Obtain from listn");
                        break;
        case(6) : printf("Clear Listn");
                        break;
        case(7) : printf("Good-Byen");
                        exit(0);    
                        break;
        default : printf("Enter a value 0-7n");
                        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.] %in", 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

是什么原因导致的?

去掉

中的最后一个分号
for (x = 0; x < SIZE; x++);

,以便将循环后的块放入循环内,并让系统迭代该块。

然后,在迭代块后添加break;,以免系统继续显示下一个菜单。

还要注意,在托管环境中应该使用标准的int main(void)而不是void main(),这在C89中是非法的,在C99或更高版本中是实现定义的,除非您有一些特殊的原因使用非标准签名。

回答更新后的问题:

printf("[%i.] %in", i + 1, &userinput[x]);

将调用未定义行为,因为类型错误的数据被传递给printf(): %i调用int,但&userinput[x]int*类型。使用userinput[x]而不使用&来打印数组的内容

最新更新