读取和比较文本文件C中的数字

时间:2011-10-16 13:49:27

标签: c file text

我是C编程的新手,所以我遇到了以下问题的困难。

我有一个文本文件inp.txt,其中包含以下信息:

400;499;FIRST;
500;599;SECOND;
670;679;THIRD;

我需要输入一个数字,我的程序需要将它与inp.txt文件中的数字进行比较。

例如,如果我输入450,则介于400和499之间,因此我需要将FIRST一词写入文件out.txt

我不知道如何将字符数组转换为int。

1 个答案:

答案 0 :(得分:1)

我想你会在你的程序中想要这些一般步骤(但是我会留给你弄清楚你想要怎么做)

  1. 将每个范围和文本“FIRST”,“SECOND”等从文件inp.txt加载到数组或多个数组或类似文件中。正如我在上面的评论中所说,fscanf可能很方便。此页面描述了如何使用它 - 页面是关于C ++的,但在C中使用它应该是相同的http://www.cplusplus.com/reference/clibrary/cstdio/fscanf/。粗略地说,我们的想法是为fscanf提供一个格式说明符,用于从文件中的一行中提取的内容,并将它找到的位放入您指定的变量中。
  2. 提示用户输入数字。
  3. 查看数组以确定数字适合的范围,以及输出哪个文本
  4. 编辑:我会像提问者要求的那样提供更多细节。这仍然是一种给你一些想法的骨架。 使用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_endchar 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从字符串读取到整数变量。我没有尝试过这种方式。