Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 存储一个数字,这样它就不会在循环的下一次迭代中被重新定义_C_Loops_For Loop - Fatal编程技术网

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

C 存储一个数字,这样它就不会在循环的下一次迭代中被重新定义,c,loops,for-loop,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
数组中,然后再显示该数组,但是这比预期的要困难

下面是一个例子:

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
}
字符行[50];
int numOfLines=0;
int numOfWords=0
int i;
int-wordsPerLine[50]//此时未使用

对于(i=1;i问题,正如我所看到的,您试图使用相同的变量
i
两次作为两个单独循环的计数器,这会导致错误的逻辑


为外循环使用一个单独的计数器,比如说,
j
,并使用该变量在内循环的外部,在外循环的主体末端,索引
wordsPerLine

问题在于,我看到的是,您试图将同一变量
I
作为两个单独循环的计数器,这会导致错误的逻辑

为外循环使用一个单独的计数器,比如说,
j
,并使用该变量在内循环外部,在外循环主体的末端索引
wordsPerLine

以下是您的问题:

  • 您对内循环中的控制变量重复使用
    i
    ,因此它会干扰外循环。为此使用单独的变量(
    j
  • 在外部循环中,从1开始计数,因此
    wordsPerLine[0]
    永远不会被设置。从0开始这个循环
  • wordsPerLine[i]
    设置为
    numofords
    的当前值,即总字数。相反,在循环之前将该值设置为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]++;
                }
        }
 }
for(i=0;i以下是您的问题:

  • 您对内循环中的控制变量重复使用
    i
    ,因此它会干扰外循环。为此使用单独的变量(
    j
  • 在外部循环中,从1开始计数,因此
    wordsPerLine[0]
    永远不会被设置。从0开始这个循环
  • wordsPerLine[i]
    设置为
    numofords
    的当前值,即总字数。相反,在循环之前将该值设置为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]++;
                }
        }
 }

for(i=0;i在嵌套for循环中使用不同的计数器并重置numof字

char lines[50];
int numOfLines = 0;
int numOfWords = 0;
int i, j;
int wordsPerLine[50];  //Unused at this point

for(i = 1; i <= 1000; i++){
    fgets(lines,50,stdin);
    if (strcmp(lines, ".\n") == 0){
        break;
    }
    for (j = 0; j < strlen(lines); j++){
        if(lines[j] == ' ' || lines[j] == '\n'){
            numOfWords++;
            wordsPerLine[numOfLines]++; //everything works up until here
        }
    }
    numOfLines++;
}
for (i = 0; i < numOfLines; i++){
    printf("words in %d is %d\n", i, wordsPerLine[i]); //trying to print out the array where I'd hope to store them, however I get a bunch of random numbers
}
printf("total words is %d\n", numOfWords);
字符行[50];
int numOfLines=0;
int numOfWords=0;
int i,j;
int-wordsPerLine[50];//此时未使用

for(i=1;i在嵌套for循环中使用不同的计数器,并重置numofWords

char lines[50];
int numOfLines = 0;
int numOfWords = 0;
int i, j;
int wordsPerLine[50];  //Unused at this point

for(i = 1; i <= 1000; i++){
    fgets(lines,50,stdin);
    if (strcmp(lines, ".\n") == 0){
        break;
    }
    for (j = 0; j < strlen(lines); j++){
        if(lines[j] == ' ' || lines[j] == '\n'){
            numOfWords++;
            wordsPerLine[numOfLines]++; //everything works up until here
        }
    }
    numOfLines++;
}
for (i = 0; i < numOfLines; i++){
    printf("words in %d is %d\n", i, wordsPerLine[i]); //trying to print out the array where I'd hope to store them, however I get a bunch of random numbers
}
printf("total words is %d\n", numOfWords);
字符行[50];
int numOfLines=0;
int numOfWords=0;
int i,j;
int-wordsPerLine[50];//此时未使用

对于(i=1;i
printf(“%d”,wordsPerLine);
-你的意思是
wordsPerLine[i]
?是的,我的坏消息我编辑了它,在numofords的结尾声明中添加了一个分号,并在嵌套循环
printf(“%d”,wordsPerLine);
-你的意思是
wordsPerLine[i]
?是的,我的错我编辑了它在numofords的结束声明中添加了一个分号,并在嵌套循环中使用了不同的索引
您从未在内部循环的每次迭代中重置numofords,因此您最终得到了一个运行的总数。在内部循环之前设置numofords=0。
不需要这个总数吗?想想看,这可能是一个问题最好的方法是这样做。你可以按现在的方式将每行的单词相加,但这是额外的工作。我将进行更新以改进。
你从未在内部循环的每次迭代中重置numOfWords,因此你最终得到一个运行的总数。在内部循环之前设置numOfWords=0。
这不是需要的总数吗?想想看,可能是这样的最好的方法是这样做。你可以像现在一样把每行的单词加起来,但那是额外的工作。我会更新以提高。