如何从文本文件创建二维数组并在 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 中打印到新文件的主要内容,如果未能解决你的问题,请参考以下文章