读取和比较来自txt文件C的数字
我是C编程的新手,所以我遇到了下面这个问题的困难。
我有一个文本文件inp.txt
,其中包含以下信息:
400;499;FIRST; 500;599;SECOND; 670;679;THIRD;
我需要输入一个数字,我的程序需要将它与inp.txt
文件中的数字进行比较。
例如,如果我输入450,它介于400和499之间,所以我需要将单词FIRST
写入文件out.txt
我不知道如何将字符数组转换为int。
我想你会在你的程序中想要这些一般步骤(但是我会留给你弄清楚你想要怎么做)
- 将每个范围和文本“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
从字符串读取整数变量。 我没有尝试过这种方式。