关于#C语言#文件的问题


#include 


int main()
{
    int k, n, i, a[6] = { 1,2,3,4,5,6 };
    FILE* fp;
    fp = fopen("d2.dat", "wb");
    for (i = 0; i < 6; i++) fprintf(fp, "%d\n", a[i]);
    fclose(fp);
    fp = fopen("d2.dat", "rb");
    for (i = 0; i < 3; i++) fscanf(fp, "%d%d", &k, &n);
    fclose(fp);
    printf("%d,%d\n", k, n);
    
    return 0;
}

为什么不是 1,2?

逻辑问题,并非是换行符问题,已作修改


#include <stdio.h>
int main()
{
    int k, n, i, a[6] = { 1, 2, 3, 4, 5, 6 };
    FILE *fp;
    fp = fopen("d2.dat", "wb");
    for (i = 0; i < 6; i++)
        fprintf(fp, "%d\n", a[i]);
    fclose(fp);
    fp = fopen("d2.dat", "rb");
    /* for (i = 0; i < 2; i++) */ fscanf(fp, "%d%d", &k, &n);
    fclose(fp);
    printf("%d,%d\n", k, n);
    return 0;
}


该回答通过自己思路及引用到各个渠道搜索综合及思考,得到内容具体如下:


这是因为在文件写入时,每个整数都是单独写入一行的,每个整数后面有一个换行符。因此,在读取文件时,应该使用"%d\n"格式字符串来正确地读取每个整数。

在当前代码中,读取文件时使用的格式字符串为"%d%d",这意味着它尝试读取两个整数,但是每个整数后面都没有换行符,所以fscanf()函数会将第一个整数1和第二个整数2都读取到变量k中,而变量n没有被正确地赋值。

要修正这个问题,您可以将读取文件的代码更改为以下内容:

fp = fopen("d2.dat", "rb");
for (i = 0; i < 3; i++) fscanf(fp, "%d\n", &k); // 使用"%d\n"来正确地读取整数
fscanf(fp, "%d\n", &n); // 这里读取的是下一个整数,也需要使用"%d\n"
fclose(fp);
printf("%d,%d\n", k, n);

这样,代码将会正确地输出1,2。


如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7622093
  • 你也可以参考下这篇文章:C语言学习笔记 函数(一)为什么使用函数?
  • 除此之外, 这篇博客: 初学C语言中的 1.什么是程序?什么是程序设计? 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

            ① 所谓程序,就是一组计算机能识别和执行的指令。每一条指令使计算机执行特定的操作。只要让计算机执行这个程序,计算机就会“自动地”执行各条指令,有条不紊的进行工作。一个特定的指令序列,用来完成一定的功能。

             ②为了使计算机系统能实现各种功能,需要成千上万个程序。这些程序大多数是由计算机软件设计人员根据需要设计好的,作为计算机的软件系统的一部分提供给用户使用。此外用户还可以根据自己的实际需要设计一些应用程序。

  • 您还可以看一下 黄强老师的30分钟彻底学会C语言指针视频教程课程中的 结构体类型的指针小节, 巩固相关知识点

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^