c - 存储一个数字,这样它就不会在循环的下一次迭代中被重新定义

标签 c loops for-loop

我正在尝试编写一个循环来计算输入的单词总数以及给定行上的单词数。总字数是累积的,但是给定行上的字数不是。我如何将这个数字存储在循环之外,以便它不会在下一次迭代中被重新定义?

我的想法是将它们存储到一个 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]++;
                }
        }
 }

编辑:

更改了 wordsPerLinenumOfWords 的管理方式,以便 numOfWords 包含外循环完成时的总字数。

关于c - 存储一个数字,这样它就不会在循环的下一次迭代中被重新定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41702090/

相关文章:

python - 循环遍历包含字典的嵌套列表

javascript - AngularJS:如何在嵌套的 ng-repeats 中绑定(bind)数据?

javascript - for 循环中的问题

javascript - 使用 javascript 在 settimeout 中为 img 添加类

c - 代理中的非阻塞套接字和 poll() 怪癖

c++ - 只有条件为 1 的程序不进入 while 循环

c++ - 编译时如何更改makefile诊断消息[GNU ARM GCC,Eclipse make.exe]

c - 如何使用 vim 在 bufferRead 上智能地运行缩进

java - 编写一个循环 1 到 100 因数的程序。当它达到有九个因数的数字时应该停止

javascript - 使用 express-fileupload 在 NodeJs 中上传文件无法正常工作