【问题标题】:Use sscanf to read multiple times string使用 sscanf 读取多次字符串
【发布时间】:2023-03-10 05:38:01
【问题描述】:

我正在尝试读取多维数组内的字符串内容...问题是,当我这样做时,sscanf 继续只读取第一个字符...

在我的字符串上我有这个:

A1+A2+A3+A4.

我想读 %c%d ,如果只有 A1 我可以读这个,但是当这种情况发生时,它只会读 A1...

我这样做是为了只读取第一个字符:

if(sscanf(array[line][colum], "%c%d", &colum, %line) == 2){
   printf("COL: %c, Line: %d", colum, line);

如何读取整个字符串?

【问题讨论】:

    标签: c arrays string scanf


    【解决方案1】:

    在格式字符串中使用%n 说明符。

    例如

    #include <stdio.h>
    
    int main(void){
        const char *str="A1+A2+A3+A4.";
        char col;
        int line;
        int offset = 0, readCharCount;
        while(sscanf(str + offset, "%c%d%*c%n", &col, &line, &readCharCount)==2){
            printf("%c, %d\n", col, line);
            offset += readCharCount;
        }
        return 0;
    }
    /* result
    A, 1
    A, 2
    A, 3
    A, 4
    */
    

    【讨论】:

    • 并将“对”A1 的位置替换为它们各自的值,例如,A1 在我的数组中具有数组 [0] [0] 的值?使用像这样的简单替换,我只使用 strcpy,但如果我在这种情况下使用,我将替换所有字符串,它不是我想要的,我想保留所有其他值..
    • 当我在第一个参数中获取数组 [line][col] 时,我得到了无限循环.... [code]sscanf(array[line][col] + offset .....[/code]
    • infinity loop while i'm taking the array[line][col] at the first parram 可能会将其初始化(每个循环)到offset 的循环值中?
    • 好的,我修好了,但是,我也想读 OP,我试过这样的东西吗? sscanf(matris[i][c] + offset, "%c%d%c%n", &col, &line, &op, &readCharCount)==3 printf("%c, %d, %c", col, line , op"); 并且它不会打印单元格上的所有出现,如果我用你的代码写 A1+B1,它会打印 A, 1 | B,1 但是当我用我的代码写时,会打印 A,1 和 +( op) 仅此而已...我也想打印 b,1...我可以更改什么?
    • @user2505640 我认为你的方式没有问题。但它可能是输入字符串的不同格式。如果您认为尝试以灵活的格式做出响应,我认为 scanf 不适合。
    猜你喜欢
    • 2016-08-14
    • 1970-01-01
    • 1970-01-01
    • 2019-04-10
    • 1970-01-01
    • 2012-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多