gpt4 book ai didi

c - 从输入文件读取输入,不断陷入无限循环

转载 作者:行者123 更新时间:2023-11-30 14:44:31 25 4
gpt4 key购买 nike

在不知疲倦地寻找解释之后,我决定向 stackoverflow 上的大佬们请教。因此,我当前正在尝试从名为 data.txt 的文件中逐行读取每个输入。该程序使用简单的 scanf 等工作得非常好,但是当我想从文件中读取输入值时,该程序仅读取 txt 的前 3 行,并且它在无限循环中不断重复。我的代码如下所示。我保留了大部分代码,以防其他人可能想使用它。程序只会无限读取 1, 12, 0。示例 data.txt 文件如下所示

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>

// Global variables
char *Hstring = NULL;
int maxLength, parity;
char *temp = NULL;
int userChoice = 0;


void option1() {
// User inputs length and even or odd parity bit
printf("\n*** Maximum Code Length: %d", maxLength);
//scanf("%d",&maxLength);
printf("\n*** Parity: %d", parity);
//scanf("%d",&parity);
// allocate memory for hamming string based on maximum length and
//size of character element
Hstring = (char *)malloc(maxLength * sizeof(char));
return;
}

void option2() {
/* declare local vars */
int aLength, k, parBits, parValue, errorPos, i, j;
/* prompt for hamming code as a "string"*/
printf("\nEnter the Hamming Code: ");
scanf("%s", Hstring);
temp = Hstring;
aLength = strlen(Hstring);
parBits = ceil(log(aLength) / log(2));
}

int main() {
FILE *fp;
fp = fopen("data.txt", "r");
if (fp == NULL) {
printf("ERROR OPENING THE FILE\n");
}
fscanf(fp, "%d %d %d", &userChoice, &maxLength, &parity);
//end file open

while (userChoice != 3) {
printf("\nEnter Selection: %d", userChoice);
//scanf("%d",&userChoice);
switch (userChoice) {
case 1:option1();
break;
case 2:option2();
break;
case 3:
printf("\n*** Program Terminated Normally\n");
break;
default: printf("invalid input please input another number\n\n");
break;
}
}
/* print out menu, prompt for choice, and call appropriate procedure
until user quits */

return 1;
}

示例数据.txt

1
12
0
2
1000
1

代码在读取 option1() 中的第三个整数(奇偶校验)时开始循环

如有任何帮助,我们将不胜感激。谢谢!

最佳答案

你永远不会在 while 循环中修改 userChoice ,所以它会永远循环。

无论如何,即使您在 while 循环中使用 fscanf 并因此读取整个文件直到找到 userChoice == 3,也不是一个好主意您的循环终止条件仅取决于文件的内容,您还应该检查 fscanf 的结果以了解文件的终止。您的示例数据仍将永远循环,因为它不包含 3

关于c - 从输入文件读取输入,不断陷入无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53475301/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com