嗨,有谁知道为什么这段代码让我在运行之前按三次输入?我需要它来完成第一个'\ n'的学校作业 这是代码:非常感谢!!
int main()
{
char L1=0, L2=0, L3=0 ;
int count_hya=0, countLA=0, countLC=0, countLH=0, countLL=0 ;
printf("give me some letters\n");
while ((L1!='\n')&&(L2!='\n')&&(L3!='\n'))
{
L1=getchar();
if (L1=='A')
countLA++;
if (L1=='C')
countLC++;
if (L1=='L')
countLL++;
if (L1=='H')
countLH++;
if (L1=='H'&&L2=='Y'&&L3=='A')
count_hya++;
}
printf("number of words begning with: A=%d C=%d L=%d H=%d Hydra=%d",
countLA, countLC, countLL, countLH, count_hya);
return 0;
}
编辑将最后几行更改为:
if (L1=='H')
{
countLH++;
L2=getchar();
L3=getchar();
if (L1=='H'&&L2=='Y'&&L3=='A')
count_hya++;
}
并像魅力一样工作,非常感谢你的帮助!
答案 0 :(得分:2)
你使用的时间:
while ((L1!='\n')||(L2!='\n')||(L3!='\n'))
应该是
while ((L1!='\n')&&(L2!='\n')&&(L3!='\n'))
使用以下代码
#define SCANF_CHK(L) \
scanf("%c", &L); \
if(L=='\n') continue;
int main()
{
char L1=0, L2=0, L3=0 ;
int count_hya=0, countLA=0, countLC=0, countLH=0, countLL=0 ;
printf("give me some letters\n");
while ((L1!='\n')&&(L2!='\n')&&(L3!='\n'))
{
SCANF_CHK(L1);
SCANF_CHK(L2);
SCANF_CHK(L3);
if (L1=='A')
countLA++;
if (L1=='C')
countLC++;
if (L1=='L')
countLL++;
if (L1=='H')
countLH++;
if (L1=='H'&&L2=='Y'&&L3=='A')
count_hya++;
}
printf("number of words begning with: A=%d C=%d L=%d H=%d Hydra=%d\n",
countLA, countLC, countLL, countLH, count_hya);
return 0;
}
答案 1 :(得分:1)
这一行:
scanf("%c%c%c", &L1, &L2, &L3);
将读取3个字符。如果按一次Enter键,它将读取一个字符,并等待更多。
实际上,如果输入
,您最多可能需要输入5次1<enter>
<enter>
<enter>
<enter>
<enter>
一种解决方案是通过char读取char(然后您可以使用getchar()
而不是scanf("%c");
)。其他解决方案是一次读取整行(可能fgets()
)。
由于这是学校作业,我不打算为你写一个解决方案:)
答案 2 :(得分:0)
您必须按三次/ n才能启动程序但要停止它。这是一个条件。三个输入(l1,l2,l3)必须是/ n才能留下一个while循环。
答案 3 :(得分:0)
这是一个有效的解决方案:
#include<stdio.h>
int main()
{
char L1=0, L2=0, L3=0 ;
int count_hya=0, countLA=0, countLC=0, countLH=0, countLL=0 ;
int flag=1;
printf("give me some letters\n");
while (flag==1)
{
if(flag==1)
{scanf("%c",&L1);
if( L1=='\n')
flag=0;
}
if(flag==1)
{scanf("%c",&L2);
if( L2=='\n')
flag=0;
}
if(flag==1)
{scanf("%c",&L3);
if( L3=='\n')
flag=0;
}
if (L1=='A')
countLA++;
if (L1=='C')
countLC++;
if (L1=='L')
countLL++;
if (L1=='H')
countLH++;
if (L1=='H'&&L2=='Y'&&L3=='A')
count_hya++;
}
printf("number of words begning with: A=%d C=%d L=%d H=%d Hydra=%d",
countLA, countLC, countLL, countLH, count_hya);
return 0;
}
在上面的代码中,如果前一个字符与'\ n'不同,您将只读取以下字符。这样,您永远不需要按'\ n'三次。