为什么这个C程序会自己连续运行三次for循环?

如图,程序和运行结果都在里面,按我的想法是在一定数值范围内,输入人名,然后可以显示我每个人名输了多少次,可为何会出现这个结果。。。。。。求错误原因

为了方便看,我粘一下代码吧
#include <stdio.h>

int main (void)
{
int m,n,i,j,k;
char a;
scanf("%d",&n);
for (m = 0,i = 0,j = 0,k = 0;m < n;m++)
{
scanf ("%c",&a);
if (a == "Li")
{
i++;
}
else if (a == "Zhang")
{
j++;
}
else
{
k++;
}
printf("%d %d %d\n",i,j,k);
}

return 0;
}

问题有两个
1.char a;只有一个字符,if(a == "Li")肯定是比较不出来的,所以i为0;
2.scanf()函数(scanf ("%c",&a);)的问题
想过没有:输入10后为什么输出0 0 1?这是由于循环内的scanf("%c",&a)每次只能接受一个字符,首先接收了输入10后面的回车,然后才接收后续输入的字符Li。
至于循环三次是由于接收了'L'和'i'这两个字符及其后的回车。如果输入Liu就会循环4次了。
知道问题所在,就好解决了。
温馨提示:内容为网友见解,仅供参考
第1个回答  2015-07-17
问题出在scanf ("%c",&a);
用scanf引入%c格式的字符是最烦人的。追问

用 putchar ?

c语言for循环嵌套语句中有连续多个for语句怎么运行的
for(int k=0;k<5;k++){ printf("k");} } } 这个程序一步步来 第一步先进入i的循环 n变成1;在进入j的循环 打印一个j ;在进入k的循环,打印一个k 然后会继续进行k循环直到k循环结束 也就是打印5个k 然后在进行第二个j循环 打印一个j ;在进行k循环5次 打印5个k 继续j循环直到j...

C语言中什么叫死循环?怎么避免?
死循环就是不停的执行for循环,while循环。避免死循环要看下死循环是如何产生的,例如在C语言程序中,语句“while(1)printf("*");”就是一个死循环,运行它将无休止地打印*号。产生死循环的情况有:▪ 逻辑错误 ▪ 变量处理错误 ▪ 奥尔德森循环 ▪ 无穷递归 你可以看下...

...c语言推荐系统,先读取10万条记录,然后还要for循环一次,大概需要多久...
可能得一段时间,如果每一次循环都存在输出或是其他比较复杂的操作的话,时间很可能会久到4 5分钟,而且这个和计算机的核心数没关系,如果您想提高运算速度的话,我建议你建立几个子线程,把10万个数据分为几个段,分别有这几个线程来循环,肯定会快得多....

C语言中连续使用两个break会有什么效果?
只有第一个会有作用。因为当运行到第一个的时候,就已经退出了for循环,第二个根本 不会用到。这是个冗余代码。你可以调试一下,把第二个注销,看程序功能有没有异常,如果没有,就直接注销就可以了。

for循环中条件不符为何不立刻退出?
2.运行效果图 3.推测原因:代码中连续使用两个scanf导致的,当输入5并按下回车之后,b已经被赋值成回车符了(检测到ASCII码为10),所以在switch判断逻辑当中case条件不成立,进入下一次循环,程序会显示“input”,当再次输入N or n后,由于类型检测,N or n 不会赋值给c,而是赋值给了b,此时c的...

什么是程序循环
泛用循环结构 有些编程语言有泛用循环结构,可以用来表示指定次数或指定条件的循环,像C语言的for指令或是Common Lisp语言中的do指令都是这类的例子,不过为了程序的可读性考量,在这些编程语言中还是尽量使用一些含义较明确的指令(如while指令)。 死循环 死循环一般会用在有一段程序需要永远运行,或是...

c语言dos控制台里如何实现多次连续输入?用了while后,我不明白为何最后自...
程序只要输入变量a的值为0时while循环才能停止,关于程序的执行流程用流程图说会比较清楚

下面这个C语言哪里错了,用for循环就提示syntax error : missing...
你试试把i的定义提到上面,不要在for循环中定义 include <stdio.h> include <stdlib.h> void main(){ int i;int a[3]={1,2,3};for (i=0;i<3;i++)printf("%d",a[i]);}

为什么C程序运算结果输出1个奇怪的数字?
b[4]和b[3]没有赋初始值,所以是随机值,应该是定义数组b时初始化,int b[5]={0};

为什么做C时猜数5次没有结束游戏,应该怎么改?
首先陈述目前程序运行结果:若a!=i,会一直要求重猜直到猜对,猜对后输出猜测次数1,不输出"结束游戏"问题所在:while循环条件仅有a!=i,没有break,若想离开循环只能猜对。出while循环后还在for循环中,这时就j=j+1并且输出次数了,之后还有break,使for循环并没有什么用。由于此时j==1,if语句不...

相似回答