【问题标题】:how to change array values when reading a file读取文件时如何更改数组值
【发布时间】:2013-04-28 00:21:32
【问题描述】:

我必须从我从文件中读取的内容更改在主函数中定义为全局变量的整数数组的值,读取过程是 k,char 与“x”字符串的比较是 k ,但是在数组的位置 i 上分配新值不起作用。

//global variable
int matrix[55];

static void main()
{

FILE *readFile;
    char *caracter;
    readFile = fopen(fileName,"r");
    int i;

if (readFile == NULL)
        {
            g_print ("\nError");
        }
        else
        {
          while (caracter != EOF) 
          {
          caracter = fgetc(archivo);
          if (caracter == '*')
           matrix[i] = 1;
          if (caracter == ' ')
           matrix[i] = 2;
          if (caracter == '+')
           matrix[i] = 3;
          if (caracter == 'S')
           matrix[i] = 4;
          if (caracter == 'S')
           matrix[i] = 5;
          if (caracter == 'R')
           matrix[i] = 6;
          else
           matrix[i] = 7;
      i++;
      g_print ("%d", mapaJuego[i]);
          }
}
}

【问题讨论】:

    标签: c arrays string gtk int


    【解决方案1】:

    您的变量caracter 是一个指针。如果您阅读fgetc 的文档,您会看到它返回一个int

    您还可以在初始化之前使用caracter,这意味着它实际上可以成为EOF,即使您还没有阅读它。

    您应该做的第一件事当然是修复类型。第二个应该是把循环条件改成这样:

    while ((caracter = fgetc(archivo)) != EOF)
    

    它在一个表达式中进行赋值检查错误/文件结尾。

    【讨论】:

    • 修复它会将字符更改为 int 类型,并更改循环条件(两者都完成)但是我的新问题是我如何将字符保留的内容与“*”等字符进行比较 if它是一个 int,它保留了什么?
    • @DiegöRivera n由于intcharacter 都是整数类型,编译器会为您处理它们之间的转换。因此,将 int 变量与 '*' 等字符文字(注意单引号)进行比较将没有问题。
    【解决方案2】:

    您的代码有更多问题。除了 Joachim 指出的那些:

    1. 字符必须是int
    2. 字符未初始化;

    您还有以下问题:

    1. i 未初始化使用(这是一个拦截器);
    2. 您的main() 函数是静态的;
    3. 您正在比较'S' 两次;
    4. 您的代码不是最理想的(在匹配后也会比较所有内容):只需使用 switch..case 或者更好的是 strchr() 调用;
    5. 您的 main() 函数是 void(没什么大不了的,但会阻止您向操作系统返回特定值)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-10
      • 1970-01-01
      • 2014-12-29
      • 1970-01-01
      • 2021-09-10
      相关资源
      最近更新 更多