c - 使用 fprintf 引起的无限循环

标签 c

我正在尝试将用户输入的一串字符(作为字符)打印到文件中,并在用户输入结束时停止打印。当我运行代码时,似乎创建了一个无限循环,并且大量的 被打印到文件中。我不知道出了什么问题。

代码如下:

     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/

相关文章:

c - 双指针 typedef 结构数组

c - 扫描不同类型的变量

c++ - const int*、const int * const 和 int const * 之间有什么区别?

c - memset() 未将值设置为 1

c - 如何检查 malloc() 是否过度使用内存

为 BEAM 创建硬件加速管道

c - 如何使用 Thrift 代替 RPC 进行消息传递

c - 需要可执行堆栈和堆内存

c - 是否(不)可以在 C 源代码中使用特殊字符?

c++ - 在 C 中使用 C++ API?