c - 从 C 中的输入文件中识别字符

标签 c scanf

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

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

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

最佳答案

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

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 是一个古老而笨拙的函数,它可以用于快速和肮脏的解析,但有很多怪癖和缺点,学习手册并看很多例子。

关于c - 从 C 中的输入文件中识别字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35837071/

相关文章:

c - 旗帜如何发挥作用?

c++ - 在 C/C++ 中读取 OpenOffice 文件

c - scanf 无法识别 %59[^\n]

c - 用用户输入填充 *char[]

c - 是否可以多次 scanf 且输出中没有换行符?

c - 返回以 void * 形式存储在 fifo 队列中的 struct *(通过多个函数返回它)

c - removehead 函数中的内存泄漏

c - C中多线程,求4个数组的平均值

C 代码 - 没有足够的可用内存将数据从 txt 文件读取到用于 Debug模式的一维动态数组

c - 在循环中使用 printf 然后 scanf