鱼C论坛

 找回密码
 立即注册
查看: 2540|回复: 4

关于作业我的代码的bug

[复制链接]
发表于 2016-3-5 01:37:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
十四课动动手第二题,原题不再赘述。我的代码如下
  1. #include <stdio.h>

  2. int main()
  3. {
  4.         int i;
  5.         int j = 0;
  6.        
  7.         while (1)
  8.         {
  9.                 printf("Please input a number:");
  10.                 scanf("%d", &i);
  11.                 j += i;
  12.                 if ((char)i == 'q') {
  13.                         break;
  14.                 }
  15.         }
  16.        
  17.         printf("Result:%d", j);
  18.          
  19.        
  20.         return 0;
  21. }
复制代码


编译以后运行,当输入q时,不会退出循环,而且会不断的打印Please input a number 2016-03-04.png

原因未知。。。

于是乎我把百分号d改成了百分号c,以确保成功退出,代码如下
  1. #include <stdio.h>

  2. int main()
  3. {
  4.         int i;
  5.         int j = 0;
  6.        
  7.         while (1)
  8.         {
  9.                 printf("Please input a number:");
  10.                 scanf("%c", &i);
  11.                 j += i;
  12.                 if ((char)i == 'q') {
  13.                         break;
  14.                 }
  15.         }
  16.        
  17.         printf("Result:%d", j);
  18.          
  19.        
  20.         return 0;
  21. }
复制代码


然后编译运行,第一次循环正常,输入数字第二次循环打印了两次Please input a number。而且0+3出现了答案174,就算是阿斯卡码相加也不会得到这个啊?

c新手。。。求教 2016-03-04 (1).png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-3-5 15:47:32 | 显示全部楼层
首先是第一次的代码scanf("%d", &i);
其中i 是int,'q'是char,所以‘q’无法赋值给i

第二个代码scanf("%c", &i);
i是int,而scanf里的确是“%c”。。。

关于Please input a number:出现两次是因为
第一次输入了'0'以及 回车
scanf函数读取了0,但回车还在输入流内
第二次循环scanf函数直接读取了还在输入流内的回车。。。
建议在用这个函数的时候后面加一句getchar();
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-3-5 15:56:19 | 显示全部楼层
  1. #include <stdio.h>

  2. int main()
  3. {
  4.         int i = 0;
  5.         int j = 0;
  6.         
  7.         while (1)
  8.         {
  9.                 printf("Please input a number:");
  10.                 scanf("%d", &i);
  11.                 getchar();
  12.                 j += i;
  13.                 if (i == 0)
  14.                 {
  15.                         break;
  16.                 }
  17.         }
  18.         
  19.         printf("Result:%d", j);
  20.          
  21.         
  22.         return 0;
  23. }
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
漆雕古代 + 5 + 5 + 3 热爱鱼C^_^

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-3-5 17:39:57 | 显示全部楼层
#include <stdio.h>

int main()
{
        char i=0;
        int j = 0;

        while (1)
        {
                printf("Please input a number:");
                scanf("%c", &i);
                getchar();
                if ((char)i == 'q') {
                        break;
                }
                j += (i - 48);
        }
        printf("Result:%d", j);


        return 0;
}

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +2 收起 理由
漆雕古代 + 5 + 5 + 2 热爱鱼C^_^

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-3-5 17:40:48 | 显示全部楼层
  1. #include <stdio.h>

  2. int main()
  3. {
  4.         char i=0;
  5.         int j = 0;

  6.         while (1)
  7.         {
  8.                 printf("Please input a number:");
  9.                 scanf("%c", &i);
  10.                 getchar();
  11.                 if ((char)i == 'q') {
  12.                         break;
  13.                 }
  14.                 j += (i - 48);
  15.         }
  16.         printf("Result:%d", j);


  17.         return 0;
  18. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-22 00:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表