Пицца код не работает |С Программирование на Корице - PullRequest
0 голосов
/ 05 марта 2019

Я пытаюсь прочитать имя и некоторые ответы, цель программы - задать все вопросы, доставить необходимые ответы и все ...

Интересно, сможете ли вы помочь мне понять?что не так, почему и как это решить ...

Я нахожусь на машине Mint (Cinnamon) и использую терминал для создания файлов, редактирования, компиляции и запуска кода с помощью touch, nano и gcc.

Это довольно простой код, просто для удовольствия во время обучения:

#include <stdio.h>
#include <stdlib.h>

int main () {

char answer, answer2, name;
int slices;

printf("Do you love Pizza? Please, enter your name:\n\n");
scanf("%c\n\n", &name);
printf("%c loves Pizza!!!\n\n", name);

printf("Are you all right, %c?\n\n", name);
scanf("%c\n\n", &answer);

printf("I am glad you are allright!! :D\n\n"); //it's supposed to be a positive answer!
printf("Do you want some slices now?\n\n");
scanf("%s\n\n", &answer2);

printf("Ah, that's awesome!!\n\n");
printf("And how many slices do you wish?\n\n");
printf("I want ");
scanf("%d\n\n", &slices);

printf("Awesome!!\n\n");
printf("Enjoy your %d Pizza slices!! :D\n\n", slices);
return 0;
}

1ˢᵗ Ошибка: печатается только первая буква введенной информации

2ᶮᵈ Ошибка: второй вопроса также четвертый не выполняется вообще, и так, печатает значение char (верно?)

Результат:

Do you love Pizza? Please, enter your name:

Finder
F loves Pizza!!!

Are you all right, F?

I am glad you are allright!! :D

Do you want some slices now?

YES
Ah, that's awesome!!

And how many slices do you wish?

I want Awesome!!

Enjoy your 29285 Pizza slices!! :D

Как это решить?

1 Ответ

0 голосов
/ 05 марта 2019

Вам всегда нужно очищать буфер stdin каждый раз, когда вы вводите что-то в scanf(), чтобы избавиться от '\n'.Вот почему ваша программа пропускает часть ввода.

#include <stdio.h>
#include <stdlib.h>
#include <string.h> // needed for strlen() function.

int main()
{
    char name[50];
    char answer, answer2;
    int slices;
    int c; // buffer cleaner.

    printf("Do you love Pizza? Please, enter your name:\n\n");

    if ((fgets(name, 50, stdin)) != NULL)// removing '\n' from the string.
    {
        size_t len = strlen(name);
        if (len > 0 && name[len - 1] == '\n')
            name[--len] = '\0';
    }
    printf("%s loves Pizza!!!\n\n", name);

    printf("Are you all right, %s?\n\n", name);
    getchar();
     while ((c = getchar()) != '\n' && c != EOF) // cleaning the buffer
        ;
    // scanf("%c\n\n", &answer);--->  if it is suppossed to be positive answer why store the variable?

    printf("I am glad you are allright!! :D\n\n"); //it's supposed to be a positive answer!
    printf("Do you want some slices now?\n\n");
    scanf("%c", &answer2); // Consider use only one char 'y' or 'n'. Else you have to use a fgets() and store in a string variable.
     while ((c = getchar()) != '\n' && c != EOF) // cleaning the buffer
        ;
    printf("Ah, that's awesome!!\n\n");
    printf("And how many slices do you wish?\n\n");
    printf("I want ");
    scanf("%d", &slices);
    while ((c = getchar()) != '\n' && c != EOF) // cleaning the buffer
        ;

    printf("Awesome!!\n\n");
    printf("Enjoy your %d Pizza slices!! :D\n\n", slices);
    return 0;
}
...