鱼C论坛

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

关于作业我的代码的bug

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

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

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

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

int main() 
{
        int i;
        int j = 0;
        
        while (1)
        {
                printf("Please input a number:");
                scanf("%d", &i);
                j += i;
                if ((char)i == 'q') {
                        break;
                }
        }
        
        printf("Result:%d", j);
         
        
        return 0;
}

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

原因未知。。。

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

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

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

c新手。。。求教 2016-03-04 (1).png
想知道小甲鱼最近在做啥?请访问 -> 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();
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

int main() 
{
        int i = 0;
        int j = 0;
        
        while (1)
        {
                printf("Please input a number:");
                scanf("%d", &i);
                getchar();
                j += i;
                if (i == 0) 
                {
                        break;
                }
        }
        
        printf("Result:%d", j);
         
        
        return 0;
}

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> 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^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-3-5 17:40:48 | 显示全部楼层
#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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-26 20:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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