如何从文本文件创建二维数组并在 c 中打印到新文件

Posted

技术标签:

【中文标题】如何从文本文件创建二维数组并在 c 中打印到新文件【英文标题】:How to create 2D array from text file and print to new file in c 【发布时间】:2022-01-23 03:46:57 【问题描述】:

想知道我是否可以得到一些建议。首先,我对编程很陌生,所以对于任何愚蠢的错误,我深表歉意。请随时指出它们,我会努力研究改进。

我觉得我的阵列根本上做错了什么。

我正在尝试从文件名由用户输入指定的文件中读取,将文件中的信息存储在二维数组中,然后我计划将其打印到另一个文件中,再次由用户输入定义。

我目前正在打印数组,以检查它是否已存储,但我认为我使用的二维数组不正确,因为当我尝试将 fprintf 打印到我的文件中时,它只是不起作用。

任何建议将不胜感激。

谢谢。代码如下:

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

int main()

   char finame[100];
   printf("Enter file you would like to open: ");
   scanf("%s", finame);
   FILE *in = fopen(finame, "r"); 

   char foname[100];
   printf("Enter the filename you would like the output included in: ");
   scanf("%s", foname);
   FILE *out = fopen(foname, "w");


    /*Char array to store string */
    char str[50][20];

    int i =0;

    /*Loop for reading the file till end*/
    while((fgets(str[i],sizeof(str[i]), in)) != NULL) 
      fputs(str[i++],stdout);
      //getchar();
   

    return 0;

【问题讨论】:

你不需要二维数组,str[20] 就足够了,如果你想写入另一个文件,然后从fgets(str[i], sizeof(str[i]), in) 切换到fgets(str, sizeof(str), in) 并从fputs(str[i++], stdout); 切换到fputs(str, out); .完成后不要忘记fclose 这两个文件。 感谢大卫的回复。我绝对会为这两个文件包含 fclose。我正在考虑使用 2D 数组,因为一旦我完成了这部分,我将对信息进行冒泡排序。因此,从第一个文件中读取字符串,对其进行冒泡排序,然后将其打印到另一个文件中。抱歉,我应该在原始帖子中包含该信息,我只是不想使我的要求过于复杂。 嗯,好的,那我建议使用动态内存,realloc 或者链表,而不是固定数组,这样你就不用担心文件变大了。 好的,谢谢你的建议,我去研究一下。 【参考方案1】:
    避免混用fgets()scanf() 呼叫。 scanf() 在输入缓冲区中留下一个换行符,稍后由 fgets() 使用 (不 在这种情况下很重要,因为输入来自不是来自stdin 的文件,但总体而言是一个很好的做法)

也没有溢出保护,如果你想坚持scanf()添加一个宽度说明符并检查结果是否成功。

   if (scanf("%99s", finame) != 1) /* save one byte for \0 */
   
       /* handle error case */
   
    在写入时检查您的数组大小是否超过了数组。

添加了 2 个可以清理代码的定义指令。

#define MAX_LINES 50
#define MAX_CHAR 20

char str[MAX_LINES][MAX_CHAR];

    int i = 0;

    while (i < MAX_LINES && (fgets(str[i], MAX_CHAR, in)) != NULL) /* always check if running out bounds */
    
        fputs(str[i++], stdout);
    

上面代码的问题是,如果文件太大,你最终会丢失数据,你可以做一个动态数组并使用malloc / realloc的方法来扩展数组或链表.

【讨论】:

以上是关于如何从文本文件创建二维数组并在 c 中打印到新文件的主要内容,如果未能解决你的问题,请参考以下文章

从 C 中的文件输入创建二维数组

如何从文本文件中获取值并输入到二维数组中? C++

阅读文字段落。文件,拆分成句子,并打印到新文本。 c#中的文件

C编程:从文件中读取并在屏幕上打印

C语言扫雷的实现

C / C ++将字符串放入二维数组?