关于c语言的小问题,请问

来源:百度知道 编辑:UC知道 时间:2024/04/20 16:08:39
n人参加选举,分别用A,B,C,D表示,选时直接输入代号.选举结束后输出票数.请问下面的程序的逻辑错误出现在哪里,怎样更正 ??????谢谢

#include <stdio.h>
void main()
{int a,b,c,d,n,i;
char ch;
a=b=c=d=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
{scanf("%c",&ch);
if(ch=='A') a++;
if(ch=='B') b++;
if(ch=='C') c++;
if(ch=='D') d++;
}
printf("a=%d,b=%d,c=%d,d=%d",a,b,c,d);

}

楼上说的没道理。
为什么要用字符数组,是因为你每次调用scanf之后,忘记了用getch函数去掉回车符,而用%s接受字符串时,自动过滤回车符。

上上楼的说的更不对,反正每次又不会多加,无非就是多判断了几次。

正确的代码如下:

#include <stdio.h>
void main()
{
int a,b,c,d,n,i;
char ch;
a=b=c=d=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%c",&ch);
getch();
if(ch=='A') a++;
if(ch=='B') b++;
if(ch=='C') c++;
if(ch=='D') d++;
}
printf("a=%d,b=%d,c=%d,d=%d",a,b,c,d);

}

逻辑并没有错,不要用字符型读取,把ch改为数组就行了。
#include <stdio.h>
int main()
{int a,b,c,d,n,i;
char ch[2];
a=b=c=d=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
{scanf("%s",ch);
if(ch[0]=='A') a++;
if(ch[0]=='B') b++;
if(ch[0]=='C') c++;
if(ch[0]=='D') d++;
}
printf("a=%d,b=%d,c=%d,d=%d",a,b,c,