C: подскажите ввод по одной строке за раз и проверьте - PullRequest
0 голосов
/ 22 ноября 2018

Постановка задачи:
Цикл 5 раз.Каждый раз спрашивайте у пользователя целое число, проверяйте, что получен ввод этого типа, а затем запрашивайте другой ввод, пока пользователь не введет пять правильных вводов.Вывод этой программы должен выглядеть следующим образом, предполагая, что пользователь дает пять правильных вводов типа int:

Hello!Пожалуйста, дайте мне целое число: 0
Спасибо!Пожалуйста, дайте мне еще одно целое число: 1
Спасибо!Пожалуйста, дайте мне еще одно целое число: 1
Спасибо!Пожалуйста, дайте мне еще одно целое число: 2
Спасибо!Пожалуйста, дайте мне еще одно целое число: 3
Спасибо!Я доволен пятью целыми числами.

Мои попытки:

#include <stdio.h>

int invalid(x)  
{  
    printf("\nThat was not an integer, please give me an integer: ");  
    scanf("%d", &x);
}

int main()
{
    int a, b, c, d, e, x;

    printf("Hello! Please give me an integer: ");
    scanf("%d", &a);
            if(scanf("%d", &a) != 1)
            {
                    invalid(x);
            }
    printf("\nThanks! Please give me another integer: ");
    scanf("%d", &b);
            if(scanf("%d", &b) != 1)
            {
                    invalid(x);
            }
    printf("\nThanks! Please give me another integer: ");
    scanf("%d", &c);
            if(scanf("%d", &c) != 1)
            {
                    invalid(x);
            }
    printf("\nThanks! Please give me another integer: ");
    scanf("%d", &d);
            if(scanf("%d", &d) != 1)
            {
                    invalid(x);
            }
    printf("\nThanks! Please give me another integer: ");
    scanf("%d", &e);
            if(scanf("%d", &e) != 1)
            {
                    invalid(x);
            }
    printf("\nThanks! I am happy with five integers.\n");
    return 0;
}


// Failed attempt to use a loop //
for(i = 0; i < 4; i++)
{
     printf("Thanks! Please give me another integer: ");
     scanf("%d", &y);
              if(scanf("%d", &y) != 1)
              {
                     invalid(y);
              }
 }







do
{
     printf ("Thanks! Please give me another integer: ", );
     scanf("%d", &x);
         for(scanf("%d", &x) != 1)
         {
              printf("That was not an integer, please give me an integer: ")
              scanf("%d", &x);
         }
         i++;
} while (i < 4);

Общие выходы, которые я получаю из первого ввода, состоят из буквы или нецелого числа:

Hello! Please give me an integer: d  
That was not an integer, please give me an integer: Thanks! Please give me another integer:  
That was not an integer, please give me an integer: Thanks! Please give me another integer:  
That was not an integer, please give me an integer: Thanks! Please give me another integer:  
That was not an integer, please give me an integer: Thanks! Please give me another integer:  
That was not an integer, please give me an integer: Thanks! I am happy with five integers.

1 Ответ

0 голосов
/ 22 ноября 2018
  1. Вы должны использовать массив для хранения 5 чисел (или 4, или любой другой суммы, превышающей 1)
  2. В любом случае вы должны использовать цикл для запроса 5 (или любой другой серии чисел) и здесь цикл for будет хорошим
  3. Вам следует проанализировать значение, возвращаемое scanf, чтобы проверить правильность ввода, и еще раз спросить, является ли значение неправильным (это также может быть цикл, но do..while является префиксом) после удаления неверных символов из буфера ввода.

ОБНОВЛЕНИЕ

Моя версия программы:

#include <stdio.h>

#define NUM_CNT 5

int main(void)
{
    int i, res, c;
    int num[NUM_CNT]; // array for all your numbers
    printf("Hello!\n");
    for (i = 0; i < NUM_CNT; i++) {
        printf("Please give me an integer: ");
        do {
            res = scanf("%d", &num[i]);
            if ( res ) {
                printf("Thanks!\n");
            } else {
                printf("That was not an integer, please give me an integer: ");
                while ((c = getchar()) != '\n' && c != EOF); // clean input buffer
            }
        } while(res != 1);
    }
    printf("I am happy with five integers.\n");
    // just to see all the numbers
    for (i = 0; i < NUM_CNT; i++) {
        printf("%d ", num[i]);
    }
    return 0;
}

Выможете переделать ваш код, используя мои идеи.

...