代码使用前导空格正确打印出来。

时间:2014-03-31 14:44:20

标签: c

我是C编程的新手,我可能有一个简单的问题。 我看了整个网站寻找答案,但我没有运气。 所以我的程序运行正常,如果在输入文件的末尾有一个空格。例如,从unix

中的命令行运行程序

./ program-name< file.txt

如果file.txt是 //有一个空格连|是一个空间。 猫冉。| |
我得到了正确的输出1 1 1

如果是的话 猫跑。(没有空间,我得到1 1)

//I have to use C for this program.
#include <stdio.h>

int main(void){
    int i=0;
    char c;
    int NOV=0;

        while( (c=getchar())!=EOF && c !='\n' && c !=10 ){

        if( c=='a'||c=='e'||c=='i'||c=='o'||c=='u' ){
            NOV++;
        }
        if(c==' '){
            printf("%d ",NOV);
            NOV=0;
        }
    }
    printf("\n");
    return 0;
}

感谢任何帮助。

2 个答案:

答案 0 :(得分:4)

麻烦的是当你得到没有空格的EOF时,你退出循环,循环后没有任何东西打印出元音的数量。

可能在循环之后添加if (NOV != 0) printf("%d", NOV);

另外,你使用10是奇怪的; '\ n'是control-J或10.你可能会想到control-M,也就是回车或'\r'

此外,正如Blue Pixy在评论中指出的那样,您应始终使用int c;来接收getchar()getc() fgetc()的回复。函数返回int,其可以是适合unsigned char或EOF的任何值,负值。如果您使用char c,则会遇到问题。

答案 1 :(得分:0)

你的程序应该是这样读的(已经删除了很多无用的混乱):

int main(void) 
{
  int c;
  int nov = 0;

  while( (c = getchar()) != EOF && c != '\n')
  {
    if( c=='a'||c=='e'||c=='i'||c=='o'||c=='u' )
      nov++;
   }

  printf("%d\n", nov)  ;

  return 0;
}