【问题标题】:How to use char from fscanf as int如何将 fscanf 中的 char 用作 int
【发布时间】:2016-11-29 17:53:00
【问题描述】:

你好,这可能是一个愚蠢的问题,但我无法为我的世界弄清楚! (在 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) {

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

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

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

【问题讨论】:

    标签: c computer-science scanf


    【解决方案1】:

    您关于t_numbers 不能成为int 因为您不能使用"T%d" 作为格式字符串的说法是正确的,但具有误导性;如果你使用了正确的字符串"t%d",它就可以正常工作。

    【讨论】:

    • 很抱歉这是一个拼写错误!很多次为此感到抱歉!
    【解决方案2】:

    据我了解,您只需要 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)
    

    【讨论】:

    • 试过了,但遗憾的是 fscanf 只是停止扫描文件。程序运行但没有数字或任何东西被扫描。 t%d 和你的解决方案。
    • 成功了!我刚开始时忘记了空格问题!非常感谢
    【解决方案3】:
    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 设为一个数组,这样应该可以工作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-15
      • 1970-01-01
      • 2014-09-20
      • 2011-04-09
      • 2018-05-15
      相关资源
      最近更新 更多