C程序计算嵌套在while循环中的文本中的n个字母单词的数量

时间:2016-07-31 19:43:45

标签: c getchar

我在学校退学几年后又回到了编码状态,我不得不尝试在C中编写一个程序来计算文本中有多少个n字母单词,将它们存储到长度为n的数组中然后打印它们。为了保持简单,我假设n是b / w 1和10,并且每个单词仅由一个空格分隔。

这是代码,然而,似乎我的程序永远不会脱离内部while循环,因此屏幕上不会打印任何内容。我尝试在该循环的末尾打印一些东西来测试它,并且由于某种原因,程序打印它的次数与有字符(包括空格,内部条件应该捕获并退出)一样多次。我在这里俯瞰什么吗?

main()
{
int c, i, j, counter;
counter = 0;
int wlength [10];
for (i=0; i<10; ++i) //initialize array
    wlength[i]=0;
while((c=getchar())!=EOF){ // keep taking input until end of file
    while (c!=' '){   //keep counting until you reach the end of the word
        ++counter;
        c=getchar(); 
    }
    wlength [counter-1]++;  //increment the counter for that word length
    counter=0 ; //reset the counter for the next word
}
for (j=0;j<10;++j) //print the array
    printf("%d ", wlength[j]);

2 个答案:

答案 0 :(得分:0)

您有两个循环读取标准输入,只有一个检查EOF。因此,如果在文件结束之前没有完全一个空格,那么您的程序会读取文件并被​​卡住。 只有一个循环,用if - else语句替换另一个循环会更好:

Pseudo-code :
while ( getchar  and !EOF )
{
    if ( char isn't a space )
    {
        increment counter
    } else {
        increment value for given length
        set first counter to 0
    }
}

您还应该检查您是否在阵列的范围内......存在像“以潜意识”形式出现的字样; - )

答案 1 :(得分:0)

问题是inner while loop。因为在unix或unix-like系统中。在每一行的末尾是\n。所以你的代码在第一个内部循环中被阻止。你需要添加更多检查。测试条件应更改为:

while(c != ' ' && c != '\n'){
    ++counter;
    c=getchar();
}

我跑了,它奏效了。