gpt4 book ai didi

C: I/O - 从文件读取整数的最快/最佳方法

转载 作者:行者123 更新时间:2023-11-30 14:24:37 25 4
gpt4 key购买 nike

当前正在尝试使用 C I/O。我有一个仅保存整数的文件,并且每行只有一个。没有逗号等。读取它们的最佳方法是什么:

//WHILE NOT EOF
// Read a number
// Add to collection

我正在创建两个工作正常的文件..但最终,我想将它们读入,将它们加入到一个集合中,对它们进行排序,然后将它们打印到一个新文件中。您没有必要为我做所有这些,但请帮助完成上述工作..这是我迄今为止的努力:

void simpleCopyInputToOutput(void);
void getSortSave(void);

int main()
{
//simpleCopyInputToOutput();
getSortSave();

system("PAUSE");
return 0;
}

void getSortSave(void)
{
FILE *fp1;
FILE *fp2;
FILE *fpMerged;

printf("Welcome. You need to input 2 sets of numbers.\n");
printf("Please input the first sequence. Press 0 to stop.\n");

if ((fp1 = fopen("C:\\seq1.txt", "w")) == NULL)
{
printf("Cannot open or create first file!\n");
exit(1);
}

int num;
int i = 1;
while (num != 0)
{
printf("Please input value # %d\n", i);
scanf("%d", &num);

if (num == 0)
{
break;
}

fprintf(fp1, "%d\n", num);
i++;
}

printf("Please input the second sequence. Press 0 to stop.\n");
if ((fp2 = fopen("C:\\seq2.txt", "w")) == NULL)
{
printf("Cannot open or create second file!\n");
exit(1);
}

num = -1;
i = 1;
while (num != 0)
{
printf("Please input value # %d\n", i);
scanf("%d", &num);

if (num == 0)
{
break;
}

fprintf(fp2, "%d\n", num);
i++;
}

fclose(fp1);
fclose(fp2);

if ((fp1 = fopen("C:\\seq1.txt", "r")) == NULL)
{
printf("Cannot open first file!\n");
exit(1);
}

//WHILE NOT EOF
// Read a number
// Add to collection

//TODO: merge ints from both files, sort and output to new file
}

最佳答案

我建议您使用fgets:

char buffer[16];
while (fgets(buffer, sizeof(buffer), fp1))
{
long value = strtol(buffer, NULL, 10);

/* Use the value... */
}

/* fgets failed ro read, check why */
if (!feof(fp1))
printf("Error: %s\n", strerror(errno));

编辑:如何获取文件中的条目数:如果您不以任何其他方式跟踪它(例如,将项目数作为第一行),则唯一的解决方案可能是读取文件两次。一次计算行数,一次读取实际数字。在计数后使用fseekrewind将读取指针“倒回”到文件的开头。

我个人会将计数和实际读数放在一个单独的函数中。这样,如果您想从多个文件中读取数据,则不必重复代码。

关于C: I/O - 从文件读取整数的最快/最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11537404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com