我想用C编写一个彩票程序,它将选定的前几周的数字读入数组。我有一个文本文件,其中有5列用制表符分隔。我的问题如下:
我曾经为“谁想要成为亿万富翁”游戏写一个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.
它工作正常,但我不知道它对程序员来说是否足够好。 (顺便说一下,我还不是程序员,我在大学学习计算机科学)
欢迎每一个答案和建议。在此先感谢您的帮助!
答案 0 :(得分:3)
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
转换规范)。