如何使用fscanf中的char作为int

时间:2016-11-29 17:53:00

标签: c computer-science scanf

你好,这可能是一个愚蠢的问题,但我无法弄清楚我的世界! (在c中)

我正在尝试读取数字和字母之类的文件,但我想只使用编程内容中的数字。看起来像这样:

t1 stuff 12 123 stuff
t1 stuff 12 123 stuff
t1 stuff 12 123 stuff
t2 stuff 12 123 stuff
t2 stuff 12 123 stuff
t3 stuff 12 123 stuff
t4 stuff 12 123 stuff
t4 stuff 12 123 stuff
t4 stuff 12 123 stuff
t33 stuff 12 123 stuff

(它一直这样做到t33我刚从t4跳到t33以避免大名单)

我这样做的方式是:

Struct name {
char t_numbers
etc..

和:

info(struct name*stuff) {
  FILE *data;
  data= fopen("thefilename", "r");
  int i=0;
  while (fscanf(file, "%s %s %d %d %s\n",stuff[i].t_numbers, etc etc...) == 5)
...

现在我尝试先将t_numbers作为int而t%d而不是char,但由于文件中的“T”,它只能以char为主,然后是s%。

问题是,如何将stuff [i] .t_numbers用作int而不是指针?所以它使用数字而不是“T”。

示例:

while (k<=10) {
        while (stuff[i].t_numbers==n) {

威尔不会工作,因为它是一个与int比较的指针。但是如何让它发挥作用?如何在没有“T”的情况下使用这些数据,这样我就可以做到。

如果这是一个愚蠢的问题,或者已经被问过(到处搜索),我感到非常抱歉。我对此完全陌生。

(代码可能有拼写错误等,因为它只是一个快速草案的例子)

3 个答案:

答案 0 :(得分:2)

由于您无法使用In [7]:import shelve import describeToolbox as TB In [8]:TB.getRawData('Myprefix') Out [8]: --------------------------------------------------------------------------- NameError Traceback (most recent call last) <ipython-input-9-67160af666cc> in <module>() ----> 1 TB.getRawData('Myprefix') C:\Users\Math\Documents\Docs\Commos\Notebooks\describeToolbox.py in getRawData(prefix) 1 def getRawData(prefix): ----> 2 shelfFile = shelve.open('data'+prefix) 3 df = shelfFile['data'+prefix] 4 shelfFile.close() 5 return df NameError: name 'shelve' is not defined 作为格式字符串,因此您对t_numbers无法成为int的说法是正确的,但却具有误导性;如果您使用了正确的字符串"T%d",它就可以正常工作。

答案 1 :(得分:0)

根据我的理解,你只需要来自t1,t2,t3,......的数字

我有一个简单的解决方案。只有在开头有一个角色时才有效。

将代码更改为在int之前读取一个字符,如下所示。

info(struct name*stuff) {
  FILE *data;
  data= fopen("thefilename", "r");
  int i=0;
  char dummyT = 0;
  while (fscanf(file, "%c%d %s %d %d %s\n",&dummyT, stuff[i].t_numbers, etc etc...) == 5)

答案 2 :(得分:0)

info(struct name*stuff) {
FILE *data;
data= fopen("thefilename", "r");
int i=0;
char dummyT = 0;
while (fscanf(file, "%c%d %s %d %d %s\n",&dummyT, stuff[i].t_numbers, etc etc...) ==

不应该用数据替换文件吗? 你的while循环看起来像是在检查fscanf是否返回5,可能想要检查你的文件是否在最后,或者如果可能的话,保持计数器循环到33,如果允许的话,如果你想要的话,在你的名字结构中最后要使用%s,你需要使t_numbers成为一个应该工作的数组