【问题标题】:2 while loops in a function in C2 C 中函数中的 while 循环
【发布时间】:2020-04-29 11:16:45
【问题描述】:

是否可以在同一个函数中运行 2 个 while 循环? 只有一个 while 循环有效。如果我删除第一个,第二个将起作用,如果我删除第二个,第一个将起作用。

#include <stdio.h>
#include <stdlib.h>
#define FILE_NAME "results.txt"

void analyseText(int character[], int i, FILE *fptr, int *sum, int a)
{
    while ((i = fgetc(fptr)) != EOF)
    {
        if (i >= 'a' && i <= 'z')
            character[(i - 'a')]++;
        if (i >= 'A' &&  i <= 'Z')
            character[(i - 'A')]++;

        for (int i = 0; i < 26; i++)
        {
            printf("%c: %d\n", i + 'a', character[i]);

        }
        while (1)
        {
            int result = fscanf(fptr, "%d", &a);
            if (result == EOF) {
                break;
            }
            else if (result == 1) {
                *sum += a;
            }
            else {

                fscanf(fptr, "%*c");
            }
        }
    }
}

【问题讨论】:

  • i 有 2 个声明?
  • 你认为这与它有关吗?
  • 敢问为什么i是函数参数?只是好奇。无论如何,实际示例数据,以及对这个函数应该做什么的期望应该是您发布的问题的一部分。内部 while 循环看起来坏了。该循环只会在流错误/EOF 时下降,在后一种情况下,外部循环也将全部结束。
  • 您可以嵌套任意数量的while,只要它们的运行条件相关。
  • 好的,我们可以用不同的方式编写代码但功能仍然相同吗?

标签: c


【解决方案1】:

我已经运行了您的程序,似乎第二个 while 循环终止了该函数。第二个 while 循环将从文件中读取字符并一直这样做直到它到达末尾,然后将退出。两个 while 循环都会执行,但第一个循环只执行一次,第二个循环执行直到到达文件末尾。也许这是一个逻辑错误?

另外,您是否尝试在第二个循环中读取一些数字,如果文件中只有字符,结果将永远不会 pe 1。

【讨论】:

  • 第一个 while 循环计算每个字符,第二个循环将数字相加。是的,文件中既有数字又有文字
  • 尝试了新配置,如果您的文件在每一行都有类似 char number1 number2 ... 的内容,在第二个循环中,您应该检查文件的两端,还要检查文件的结尾行,开始下一个字符的循环。
【解决方案2】:

在(几乎)无限循环中存在(几乎)无限循环,两者的停止条件几乎相同。

其中一个将“永远”运行,当它触发停止条件时,另一个也将停止,看起来只有一个循环正在运行。

2 个循环

enter infinite loop1
    do some stuff one once
    enter infinite loop2
        do some stuff two "forever"

当你移除内循环时

enter infinite loop1
    do some stuff one "forever"

当你移除外循环时

enter infinite loop2
    do some stuff two "forever"

【讨论】:

    猜你喜欢
    • 2020-10-10
    • 2015-04-22
    • 2017-06-07
    • 2021-03-08
    • 2016-07-23
    • 2014-04-30
    • 1970-01-01
    • 2012-11-11
    • 2022-01-21
    相关资源
    最近更新 更多