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