我认为您会希望在您的程序中使用这些一般步骤(但我会留给您自己弄清楚您到底想怎么做)
- 将每个范围和文本“FIRST”、“SECOND”等从文件 inp.txt 加载到一个数组或多个数组或类似数组中。正如我在上面的评论中所说,
fscanf 可能会很方便。这个页面描述了如何使用它——这个页面是关于C++的,但是在C中使用它应该是一样的http://www.cplusplus.com/reference/clibrary/cstdio/fscanf/。粗略地说,这个想法是你给fscanf一个格式说明符,用于你想从文件中的一行中提取的内容,并将它找到的位放入你指定的变量中)
- 提示用户输入数字。
- 查看数组以确定数字适合的范围,从而确定要输出的文本
编辑:根据提问者的要求,我将提供更多细节。这仍然是一种骨架,可以给您一些想法。
使用fopen函数,类似这样(声明一个指针FILE* input_file):
input_file = fopen("c:\\test\\inp.txt", "r") /* "r" opens inp.txt for reading */
然后,通过检查是否input_file == NULL来检查文件是否已成功打开。
然后使用fscanf 从文件的一行读取详细信息。循环遍历文件的行,直到您阅读了整个内容。你给fscanf 指向你希望它把文件每一行的信息放入的变量的指针。 (这有点像 printf 的反向格式说明符)。
因此,您可以声明 int range_start, range_end 和 char range_name[20]。 (为简单起见,我们假设所有单词的长度最多为 20 个字符。但从长远来看,这可能不是一个好的计划)。
while (!feof(input_file)) { /* check for end-of-file */
if(fscanf(input_file, "%d;%d;%s", &range_start, &range_end, range_name) != 3) {
break; /* Something weird happened on this line, so let's give up */
else {
printf("I got the following numbers: %d, %d, %s\n", range_start, range_end, range_name);
}
}
希望这能给你一些想法。我试过运行这段代码,它似乎确实有效。然而,值得一提的是 fscanf 有一些缺点(参见例如http://mrx.net/c/readfunctions.html),所以另一种方法是使用fgets 来获取每一行(fgets 的优点是您可以指定要读取的最大字符数,所以没有超出字符串缓冲区长度的危险)然后sscanf 从字符串中读取到您的整数变量中。不过我没试过。