【问题标题】:Storing separate characters while looping with fgetc()使用 fgetc() 循环时存储单独的字符
【发布时间】:2019-12-08 14:50:05
【问题描述】:

所以我一直在尝试使用 fgetc() 逐个字符地处理 .txt 文件。我想将第一个和第三个字符存储到两个单独的变量中。这是一个示例输入文件。在这种情况下,我想做的是将第一个字符 (6) 存储到变量 1,将第三个字符 (7) 存储到变量 2。第二个是空格,所以我想在循环文件时跳过它。我能够获得第一个字符,但似乎无法找到跳转到第三个字符并将其存储在不同变量中的方法...

6 7
1 4 4 2 5 0 6
1 4 4 0 4 0 2
1 0 4 0 4 6 1
1 2 7 1 0 4 2
3 1 4 2 3 1 5
4 2 5 0 4 5 5

 int c;

            while((c = fgetc(r)) != '\n'){
                variable1 = c - '0';
                variable2 = ???
                }

            fclose(r);
            }

        printf("%i",variable1);
        printf("%i",variable2);

【问题讨论】:

  • variable1 = fgetc(r); fgetc(r); variable2 = fgetc(r)?

标签: c fgetc


【解决方案1】:

我知道您可能希望接下来阅读带有大量数字的以下行,所以这里有一个通用的解决方案,可能适用于任何长度的字符串(即少于一百个数字):

int idx = 0;
char var[100];  // change to any number you need
while((c = fgetc(r)) != '\n') {
    if( c != ' ' ) {
        var[idx++] = c - '0';
    }
}

var 中,您将拥有所有号码。而idx 将指向最后一个字符。

【讨论】:

  • 第一行中的这两个数字表示它们下方矩阵的行数 (6) 和列数 (7),如图所示。我想要做的是将这些值存储为 numberOfRows 和 numberOfCols。使用您的代码(如果我理解正确的话),我会将这两个数字存储到 var[0] 和 var[1] 中,然后可以访问它们。所以从技术上讲 char var[2] 就足够了,因为我永远不会存储超过 2 个数字。
  • @AlexandrČížek 是的,但是您可以在阅读表格的其余部分时轻松重用 var[100] =)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-29
  • 2013-01-11
  • 2011-05-14
  • 1970-01-01
  • 2011-09-30
  • 2015-01-19
相关资源
最近更新 更多