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