【问题标题】:identifying characters from an input file in C从 C 中的输入文件中识别字符
【发布时间】:2016-03-07 05:55:52
【问题描述】:

我有一个如下所示的输入文件:

5  
(2,3)  
(1,4)  
(1,3)  
(3,4)  
(4,5) 

第一个数字是有序对的数量。我正在尝试扫描数组x[i] 中(x,y) 中的每个x,并将y 数字扫描到y[i] 中。我尝试使用 fscanf 将每一行放入一个数组中,然后设置x[i]=array[1] 并为每个i 设置y[i]=array[3],但我认为发生的事情是array[0] 不等于'( ' 每次被扫描。对于每个有序对,将(x,y) 中的 x 和 y 扫描到 x[i]=xy[i]=y 中的最简单方法是什么?

【问题讨论】:

标签: c scanf


【解决方案1】:

如果对中的数字是整数,可以循环扫描:

int i, res, x[number], y[number];
for (i = 0; i < number; i++) {
    if (scanf(" (%d ,%d )", &x[i], &y[i]) != 2) {
        printf("invalid input\n");
        exit(1);
    }
}

格式中的初始空格将使用任何空白字符,例如之前的scanf 在输入流中留下的换行符。

根据 KemyLand 的建议,%d 之后的其他空格将忽略数字与 ,) 字符之间的空格。 %d 格式已经完成了在数字之前忽略空格的操作。但是您不应该在) 之后添加一个,因为它会指示scanf 使用该对之后的所有空格,包括\n,这不是问题,但会提示输入更多内容,直到出现非空格字符键入的,这不是你想要的。

scanf 是一个老旧笨重的函数,它可以用于快速和肮脏的解析,但是有很多怪癖和缺点,学习手册,看很多例子。

【讨论】:

  • @sunqingyao:哎呀!我最初写了一个可重新启动的循环,如果scanf 成功,我只增加i,然后我决定让它保持简单和愚蠢,就这样。
猜你喜欢
  • 1970-01-01
  • 2015-10-03
  • 2016-06-28
  • 1970-01-01
  • 2011-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-29
相关资源
最近更新 更多