我正在尝试编写一个循环来计算输入的单词总数以及给定行上的单词数。总字数是累积的,但是给定行上的字数不是。我如何将这个数字存储在循环之外,以便它不会在下一次迭代中被重新定义?
我的想法是将它们存储到一个 int
数组中,然后只显示该数组,然而事实证明这比预期的要困难。
举个例子:
Hello World
cats and dogs
输出:
5 words total
2 3 //2 on line one and 3 on line two
这是我目前所拥有的:
char lines[50];
int numOfLines = 0;
int numOfWords = 0
int i;
int wordsPerLine[50]; //Unused at this point
for(i = 1; i <= 1000; i++){
fgets(lines,50,stdin);
if (strcmp(lines, ".\n") == 0){
break;
}
numOfLines++;
for (i = 0; i < strlen(lines); i++){
if(lines[i] == ' '){
numOfWords++;
wordsPerLine[i] = numOfWords; //everything works up until here
}
}
}
for (i = 0; i < numOfLines; i++){
printf("%d ", wordsPerLine[i]); //trying to print out the array where I'd hope to store them, however I get a bunch of random numbers
}
最佳答案
这是您的问题:
- 您将
i
重用于内循环中的控制变量,因此它会干扰外循环。为此使用一个单独的变量 (j
)。 - 在外循环中,您从 1 开始计数,因此
wordsPerLine[0]
永远不会被设置。从 0 开始这个循环。 - 您将
wordsPerLine[i]
设置为numOfWords
的当前值,即单词总数。相反,在循环之前将此值设置为 0,并在每次迭代时递增。 - 统计单词时需要检查换行符,否则不会统计最后一个单词。
进行这些更改后,您的代码应如下所示:
for(i = 0; i <= 1000; i++){
fgets(lines,50,stdin);
if (strcmp(lines, ".\n") == 0){
break;
}
numOfLines++;
wordsPerLine[i] = 0;
for (j = 0; j < strlen(lines); j++){
if(lines[j] == ' ' || lines[j] == '\n'){
numOfWords++;
wordsPerLine[i]++;
}
}
}
编辑:
更改了 wordsPerLine
和 numOfWords
的管理方式,以便 numOfWords
包含外循环完成时的总字数。
关于c - 存储一个数字,这样它就不会在循环的下一次迭代中被重新定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41702090/