首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Cinnamon上比萨饼代码不能运行|C编程

在Cinnamon上比萨饼代码不能运行|C编程
EN

Stack Overflow用户
提问于 2019-03-05 06:04:43
回答 1查看 72关注 0票数 0

我正在试着读一个名字和一些答案,目标是让程序提出所有的问题,提供必要的答案和所有…

我想知道你是否能帮我弄明白问题出在哪里,为什么以及如何解决它……

我在一台薄荷(Cinnamon)机器上,使用终端来创建文件,编辑,编译和运行触控,nano和gcc的代码。

这是一个非常简单的代码,只是为了在学习时有趣:

代码语言:javascript
复制
#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ᶮᵈ错误:第二个问题和第四个问题根本没有完成,因此打印出字符值(对吗?)

结果:

代码语言:javascript
复制
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

如何解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-05 06:38:00

每次向scanf()输入内容以清除'\n'时,您总是需要清除stdin缓冲区。这就是为什么你的程序会跳过输入部分。

代码语言:javascript
复制
#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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54992276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档