【问题标题】:Assigning variables from a string problem从字符串问题分配变量
【发布时间】:2021-04-17 14:14:12
【问题描述】:

我正在尝试分别从内容为 '600 144 100 Rain' 的输入文件中分配 'hp' 、 'd' 、 's' 、 'status' 。我已成功将 3 个数字分配给 hp,d,s ,但 'Rain' 字符串仍未完成 因为每次我尝试添加它时它都会出现空白屏幕。这是我的 C 代码:

#include <stdio.h>

int read_file(int *hp, int *d, int *s, char t[]) {
    FILE *infile, *outfile;

    infile = fopen("input1.inp", "r");
    // input1.inp's content is "600 144 100 Rain"
    
    fscanf(infile, "%d %d %d %s", &hp, &d, &s, t); 
    
    printf("hp = %d\n",hp ) ;
    printf("d = %d\n",d ) ;
    printf("s = %d\n",s ) ;
    printf("status = %s", t) ;


    fclose(infile); 
    return 0;
}

如果我将“Rain”字符串排除在外,那么我的代码就会完美运行。 谁能告诉我如何正确地做,我犯了什么错误?

请注意,在参数区域声明变量对我来说是强制性的,我需要它来将变量传递给主要部分。谢谢!

【问题讨论】:

  • 多想一下%d 格式需要什么数据类型,hp 是什么数据类型,然后&amp;hp 是什么数据类型。
  • 这家伙^^是对的。另外,你是如何在 main 中声明 t[] 的?它有足够的空间来存储字符串吗? (即它是否至少分配了 6 个字符)
  • @GalBirka 分配至少 5 个字符是令人满意的。 (4 个字符 Rain + 1 个终止空字符)

标签: c function variables


【解决方案1】:

您正在调用 未定义的行为,将错误类型的数据传递给 fscanf()printf()。请小心,因为hpds 是指针。

部分

    fscanf(infile, "%d %d %d %s", &hp, &d, &s, t); 
    
    printf("hp = %d\n",hp ) ;
    printf("d = %d\n",d ) ;
    printf("s = %d\n",s ) ;

应该是

    fscanf(infile, "%d %d %d %s", hp, d, s, t); 
    
    printf("hp = %d\n",*hp ) ;
    printf("d = %d\n",*d ) ;
    printf("s = %d\n",*s ) ;

还应检查fopen()fscanf() 的结果。

【讨论】:

  • 啊谢谢我按照你的建议进行了修改,我将添加 fopen 和 fscanf check ,但是你如何解决将“Rain”分配给 t[] 的问题..?我仍然坚持这一点,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-07
  • 2019-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-29
相关资源
最近更新 更多