我有一个文件输入,其中我有以下数据。
1 1Apple 2Orange 10Kiwi
2 30Apple 4Orange 1Kiwi
等等。我必须从文件中读取这些数据并对其进行处理,但我不知道如何检索数据。我想将1(1个苹果)存储为整数,然后将Apple存储为字符串。 我想把整个1Apple读成一个字符串。然后用stoi函数做一些事情。
或者我可以逐个字符地阅读整个事物,然后如果该字符的ascii值位于b / w 48到57之后,那么我将把它组合成一个整数并将其余部分保存为字符串?我该怎么办?另外,我如何检查char的ASCII值是什么。 (我应该将char转换为int然后进行比较,还是有任何内置函数?)
答案 0 :(得分:1)
当且仅当您的输入模式不会改变时,如何使用fscanf()
函数。否则你应该使用fgets()
并执行检查,如果你想将数字与你建议的字符串分开。
答案 1 :(得分:0)
有一种简单的正确方法可以使用标准的C库设施,一种更难以正确的方式,以及许多错误的方法。这是一种简单的正确方法:
char[]
将整行录入fgets
缓冲区。strtol
或strtoul
理解为什么不应该使用更容易看起来的替代品(*scanf
和atoi
)非常重要。您最初可能会编写较少的代码,但是一旦您开始考虑如何处理即使是略微格式错误的输入,您就会发现应该使用strtol
。
“相当困难的正确方式”是使用lex
和yacc
。它们更复杂但也更强大。你不应该为这个问题需要它们。