Dreampossible_ 2023-09-09 16:07 采纳率: 0%
浏览 10

c语言问题求各位解答一下

求解答

#include<stdio.h>
int main()
{
    int x = 0;
    int sum = 0;
    char ch = '\0';
    do
    {
        printf("intput a value : \n");
        scanf("%d", &x);
        sum = sum + x;
        printf("是否继续(y / n)\n");
        scanf("%c", &ch);
    } while (ch == 'y' || ch == 'Y');
    printf("sum : %d\n", sum);
    return 0;
}

这样一个求累加的代码,但是由于缓冲区残留‘\n’的问题只能输入一次
于是在网上看到了两种解决办法分别是

#include<stdio.h>
int main()
{
    int x = 0;
    int sum = 0;
    char ch = '\0';
    do
    {
        printf("intput a value : \n");
        scanf("%d", &x);
        sum = sum + x;
        printf("是否继续(y / n)\n");
        scanf(" %c", &ch);       //(前边添加一个空格)消除上一个'\n'
    } while (ch == 'y' || ch == 'Y');
    printf("sum : %d\n", sum);
    return 0;
}

很不理解为什么加了个空格就可以消除'\n'
还有一种办法

#include<stdio.h>
int main()
{
    int x = 0;
    int sum = 0;
    char ch = '\0';
    do
    {
        printf("intput a value : \n");
        scanf("%d", &x);
        sum = sum + x;
        printf("是否继续(y / n)\n");
        while ((ch = getchar()) != EOF && ch != '\n');    //不停地使用getchar()获取缓冲中字符,直到获取的c是“\n”或文件结尾符EOF为止
        scanf("%c", &ch);
    } while (ch == 'y' || ch == 'Y');
    printf("sum : %d\n", sum);
    return 0;
}

这个也没看懂为什么要加(ch = getchar()) != EOF
我试了下把(ch = getchar()) != EOF && 去掉
就打不出来y或n的值了
很疑惑,求各位解答,刚学习c语言,基础不太好

  • 写回答

2条回答 默认 最新

  • 浪客 2023-09-09 16:11
    关注

    输入字符前清一下输入缓存
    fflush(stdin)

    评论

报告相同问题?

问题事件

  • 创建了问题 9月9日

悬赏问题

  • ¥40 微信小程序 使用vant组件ActionSheet 下拉面板,内容区域滚动会触发。scroll-view自定义下拉刷!即使设置停止下拉刷新也不行。
  • ¥15 专业问题提问,7月5号2点之前
  • ¥25 使用cube ai 导入onnx模型时报错
  • ¥15 关于#微信小程序#的问题:用一个网页显示所有关联的微信小程序数据,包括每个小程序的用户访问量
  • ¥15 root的安卓12系统上,如何使apk获得root或者高级别的系统权限?
  • ¥20 关于#matlab#的问题:如果用MATLAB函数delayseq可以对分数延时,但是延时后波形较原波形有幅度上的改变
  • ¥15 使用华为ENSP软件模拟实现该实验拓扑
  • ¥15 通过程序读取主板上报税口的数据
  • ¥15 matlab修改为并行
  • ¥15 尝试访问%1服务的windows注册表时遇到问题。必须先解决此问题,然后才能运行安装过程。(请确认您正在使用管理员权限运行)373