C编程 - 从文本文件中扫描信息以便在程序中使用

时间:2014-10-08 02:02:37

标签: c text scanf

我一直是Stack Overflow的长期观众,但这是我的第一个问题。因此,如果我遗漏任何重要细节或信息,请原谅并纠正我!

我刚刚开始用C语言编程。我正在尝试创建一个程序,该程序将在运行时通过我的控制台指定一个文本文件并使用 stdin 。此文本将按以下方式格式化:

    10 2 2012
    3 765 821 764
    5 856 976 847 757 789
    4 838 842 832 815
    4 809 815 789 765

前3个数字是月,日和年。之后,以下行包含数据。每行的第一个数字表示其后的数据读数。我需要根据每行后面第一个数字后面的数字进行计算。到目前为止,我一直在使用 scanf 函数来获取日期数据并将其打印为标题。

#include <stdio.h>

int main()      
{     

 // Define Variables

 int month;
 int day;
 int year;


 // Scan text file for month, day and year

 scanf("%d", &month);
 scanf("%d", &day);    
 scanf("%d", &year);

 // Print out date and headers

 printf("\nTest date: %d/%d/%d", month, day, year);
 printf("\nLED Lumens\n");
 return 0;
 }

我需要能够在每行中的第一个数字后面加上数字。然后我将使用这些数字来计算各种事物(我不需要帮助)。我的问题是,最好的方法是什么?我的想法是使用 scanf 来获取行中的第一个数字,然后循环直到达到行中的值的数量,每次扫描数字。

所以,如果我扫描第一个数字并且它是3,我将循环并扫描接下来的3个数字。然后我将对这些数字进行计算,然后对每一行重复。

这是解决这个问题的正确方法,这会有效吗?主要是我想知道如何扫描文本中的数据。每次我使用scanf函数时,它只是获取我的文本文件中的下一个数字。无论我的数据是否在以下行,它是否有效?

另请注意,我还没有学习任何处理文本文件的高级功能。因此,我坚持使用scanf来获取数据。

谢谢!如果我需要更多细节或澄清,请告诉我。

更新

感谢所有回复的人。我很感激解释scanf在文本文件中的工作原理。我能够让我的程序正常运行。至于每个人都回应了我可以使用的不同功能和方法,谢谢!我一定会在某些时候尝试这些。我意识到,除了scanf函数之外,我的任务可能更简单,更好。

3 个答案:

答案 0 :(得分:1)

scanf和朋友们的复杂程度太复杂了。

  • 我使用fgets将文件行读入缓冲区。
  • 然后使用strtoul从内部获取数字。它的第二个参数可用于查找每个数字的结束位置。
  • 数字之间的空格被strtoul跳过没有问题。

答案 1 :(得分:1)

您描述的算法应该有效...如果输入文件格式正确,您测试不同scanf的结果,以便在文件末尾停止(返回值{{ 1}})。

为了拥有更强大的功能,您应该遵循chux的建议并: - 首先阅读<= 0的完整行 - 然后按照你描述的方式使用fgets,但至少你肯定是正确的行同步并且能够检测输入文件中缺少的数字。

答案 2 :(得分:0)

在这里,您需要一个文件指针来处理文件。

FILE* fp;
int temp;

//then open the file you want to edit
//fopen(fp,"location of file with file name","mode of opening")
fp = fopen("Home/info.txt","a");

//now read through the file 
fscanf(fp,"%i",&temp);

为了更好地理解文件处理,您可以查看本教程: