我正在尝试将用户输入的一串字符(作为字符)打印到文件中,并在用户输入结束时停止打印。当我运行代码时,似乎创建了一个无限循环,并且大量的 ▯
被打印到文件中。我不知道出了什么问题。
代码如下:
printf("Please input a character string, no spaces: \n\n");
scanf("%c", &c); //assigns user input to c var
while ((c >= '0') && (c <= '9')) { //check char is an integer
fprintf(f, "%c", &c);
if (c == 0x0A) {
fprintf(f, "\n\n");
fclose(f);
}
}
这是输出文件的图像:File1.txt
最佳答案
首先,学习如何以可靠、简单的方式读取字符串。在读取字符串的几乎所有情况下忘记 scanf
并学习使用 fgets
。其次,您的根本问题是您正在阅读一个字符,然后在该字符上无休止地循环。您没有读取字符串,并且您从未检查或输出超过他们输入的第一个字符。
尝试这样的事情:
char str[129];
printf("Please input a character string, no spaces: \n\n");
fgets(str, sizeof(str), stdin);
size_t len = strlen(str);
for (size_t i = 0; i < len; i++)
{
char c = str[i];
if(c == 0x0A)
break;
if (c >= '0') && (c <= '9')) //check char is an integer
fprintf(f, "%c", c);
}
fprintf(f, "\n\n");
fclose(f);
我没有添加任何错误检查。您至少需要确保 fgets
实际成功。
关于c - 使用 fprintf 引起的无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40709872/