关于作业我的代码的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新手。。。求教
首先是第一次的代码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(); #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;
} #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;
} #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]