为什么我需要按'\ n'三次才能运行?

时间:2013-12-05 15:13:56

标签: c loops

嗨,有谁知道为什么这段代码让我在运行之前按三次输入?我需要它来完成第一个'\ 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++;
  }

并像魅力一样工作,非常感谢你的帮助!

4 个答案:

答案 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'三次。