【问题标题】:Taking input and output to file using pointer array使用指针数组将输入和输出输入文件
【发布时间】:2021-11-12 01:56:45
【问题描述】:

在这里,数组指针name[i] 不工作,我不知道如何更改指针或数组以使其工作。没有编译器错误/警告,但控制台终端显示负返回值,printf() 无法正常工作。

此外,输出文件已创建但它是空的:没有写入任何内容。

我猜fscanf() 从文件中获取字符串输入的操作存在一些问题。

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

int main()
{
    FILE *fr, *fw;
    fr = fopen("data.txt", "r");
    float wt[10], ht[10], bmi[10];
    char *name[5];
    for(int i = 0; i < 5; i++)
    {
        fscanf(fr, "%s\t%f\t%f", &name[i], &wt[i], &ht[i]);
        bmi[i] = wt[i] / pow(ht[i], 2);
    }
    printf("%s", name[2]);
    fw = fopen("bmi.txt", "w");
    for(int j = 0; j < 5; j++)
    {
        fprintf(fw, "%s\t%f\n", name[j], bmi[j]);
    }
    fclose(fr);
    fclose(fw);
    return 0;
}

 

【问题讨论】:

  • 你能给出比“不工作”更详细的描述吗?
  • 还有,文件的内容是什么?
  • char* name[5]; 是一个由 5 个指针组成的数组,每个指针都不指向任何地方。 &amp;name[i] 也不是指向 char 的指针,而是指向 char 的指针,但 %s 需要指向 char 的指针。你没有收到编译器警告吗?
  • 您的扫描成功了吗? IE。 fscanf() 的返回值(不是扫描的输入)是否如您所愿?你期待什么?

标签: arrays c file pointers


【解决方案1】:

你不应该假设文件大小是 5。你应该像这样动态地为 name 变量分配内存:

int length;
fseek(filename, 0, SEEK_END);
length = ftell(filename);
name = malloc(length);
fread(name, 1, length, filename);

【讨论】:

    猜你喜欢
    • 2021-08-17
    • 1970-01-01
    • 2022-01-25
    • 2014-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多