漆雕古代 发表于 2016-3-5 01:37:33

关于作业我的代码的bug

十四课动动手第二题,原题不再赘述。我的代码如下#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

原因未知。。。

于是乎我把百分号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-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();

放开 发表于 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;
}

迷雾少年 发表于 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;
}

迷雾少年 发表于 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;
}
页: [1]
查看完整版本: 关于作业我的代码的bug