Чтение ввода в массиве, сохранение значения -1 и выход при вводе -1?

Я пытаюсь сделать программу, которая сначала предлагает пользователю меню с параметрами меню, начиная с 0 до 7.

У меня есть заявление о переключении, чтобы проверить, какие номера вводятся. Эта программа не закончена. Я начинаю с "опции списка построения", где я был пользователем, чтобы ввести значение, чтобы оно сохранялось в массиве, когда пользователь вводит "-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

Что может быть причиной этого?

1 ответ

Решение

Удалить последнюю точку с запятой в

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] это тип int*, использование userinput[x] без & распечатать содержимое массива.

Другие вопросы по тегам