gpt4 book ai didi

c - 如何正确地从文本文件中读取数字?

转载 作者:太空宇宙 更新时间:2023-11-04 07:01:44 25 4
gpt4 key购买 nike

我想用 C 编写一个彩票程序,它将前几周的选定数字读入一个数组。我有一个文本文件,其中有 5 列用制表符分隔。我的问题如下:

  • 我应该用什么分隔列? (例如逗号、分号、制表符或其他)
  • 我应该在最后一行包含一种 EOF 吗? (例如 -1,“EOF”)是否有任何公认的或“官方”惯例来执行此操作?
  • 我应该使用哪个函数来读取数字?从文本文件中读取数据是否有任何正确或“可接受”的方式?

我曾经为“谁想成为亿万富翁”游戏编写 C 程序。在那篇文章中,我使用了一种函数,将每一行读入一个数组,该数组大到足以容纳一整行。之后我将它的数据分成这样的变量:

line: "text1";"text2";"text3";"text4"endline (-> line loaded into a buffer array)
text1 -> answer1 (until reaching the semicolon)
text2 -> answer2 (until reaching the semicolon)
text3 -> answer3 (until reaching the semicolon)
text4 -> answer4 (until reaching the end of the line)
endline -> start over, that is read a new line and separate its contents into variables.

它工作正常,但我不知道它对程序员来说是否足够好。 (顺便说一句,我还不是程序员,我在大学学习计算机科学)

欢迎任何答案和建议。在此先感谢您的帮助!

最佳答案

scanf()函数族不关心换行,所以如果要处理行,需要先读取行,然后用sscanf( )scanf() 函数系列还可以互换处理空白区域——空格、制表符、换行符等。使用制表符作为分隔符很好,但空格也可以。显然,如果您一次读取和处理一行,则换行符不会真正影响扫描。

int lottery[100][5];
int line;
char buffer[4096];

for (line = 0; fgets(buffer, sizeof(buffer), stdin) != 0 && line < 100; line++)
{
if (sscanf(buffer, "%d %d %d %d %d", &lottery[line][0], &lottery[line][1],
&lottery[line][2], &lottery[line][3], &lottery[line][4]) != 5)
{
fprintf(stderr, "Faulty line: [%s]\n", line);
break;
}
}

这在 EOF、太多行和错误行(不是以 5 个数字开头的行;您可以根据需要在循环中检查它们的值等)处停止——但是您需要运行哪些测试?)。如果你想验证空白分隔符,你必须更加努力。

也许您只想测试 5 个数字后的空格和换行符;这有点棘手(可以做到;在 sscanf() 中查找 %n 转换规范)。

关于c - 如何正确地从文本文件中读取数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37241373/

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