我在学校退学几年后又回到了编码状态,我不得不尝试在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]);
答案 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();
}
我跑了,它奏效了。