int main(){
int i,j;
char *data = "1\n2\n";
sscanf(data, "%d", &i);
sscanf(data, "%d", &j);
printf("i=%d, j=%d\n", i, j);
return 0;
}
如果你run the code,你会看到这个
i=1, j=1
为什么j=1
在这里?不应该是2
吗?我错过了非常基本的东西吗?
如果我使用sscanf(data, "%d\n%d", &i, &j);
,则显示正确的输出。但是现在下一个sscanf电话会从头开始重读吗? 这是为什么?如何正确阅读?
答案 0 :(得分:4)
您的两条sscanf
行可以改写为:
sscanf("1\n2\n", "%d", &i);
sscanf("1\n2\n", "%d", &j);
现在应该很明显为什么i
和j
都有值1
。 sscanf
无法修改data
点的位置。
使用单个sscanf
调用来提取两个令牌:
sscanf(data, "%d\n%d", &i, &j);