Sscanf的问题

时间:2014-02-01 17:58:34

标签: c++ c scanf c-strings

我决定使用sscanf作为在C ++中解析字符串的简单方法。这是我的代码示例

int x,y,level;
char type;
char *line=NULL;

if(inputMode=='M'){

    while(cin.getline(line,200)){
        sscanf(line,"(%d,%d,%d,%c)",x,y,level,type);
    }
}

我试图从中提取的格式如下所示。我需要提取三个十进制值和char值,我读取的文件的每一行都将具有相同的格式。我创建了一个名为char line [200]的c字符串。我只选择了200作为一个任意大小,因为我从来不知道字符串会知道在测试时,文件中的最大数字可能是数百万。

(3,2,1,#)

我收到错误,说%d期望int *。所以我认为将x,y,level和type更改为指针可以解决这个问题,但编译器说x,y,level和type可能在函数中未初始化。我正在使用最新的g ++ -Wall -Werror进行编译,如果有帮助的话。

2 个答案:

答案 0 :(得分:3)

您在&中的变量之前错过了sscanf运算符。

sscanf(line,"(%d,%d,%d,%c)", &x, &y, &level, &type);  
                             ^Notice the & operator.  

答案 1 :(得分:2)

scanf系列函数期望指针作为参数给出,因为它们需要修改变量,如果传递副本,它们将修改副本(因此这是无用的)。

int x,y,level;
char type;
char *line=NULL;

if(inputMode=='M'){

    while(cin.getline(line,200)){
        sscanf(line,"(%d,%d,%d,%c)",&x,&y,&level,&type);
    }
}

是你想要做的事情