我决定使用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进行编译,如果有帮助的话。
答案 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);
}
}
是你想要做的事情