C sscanf 每次都从字符串开始
C sscanf turn begin of string each time
我必须按顺序扫描字符串中的字符,但在那个例子中
char s[8]={"ab"};
char a,b;
sscanf(s,"%c", &a);
sscanf(s,"%c", &b);
printf("%c%c", a, b);
它打印 aa。但我需要它打印 ab。我该如何解决?我应该将字符串打印到文件并从文件中读取吗?
使用
sscanf(s,"%c%c", &a, &b);
您还可以检查 sscanf
的 return 值,以确保它成功地从 s
中提取了两个字符。 sscanf
returns 扫描和分配的字符总数,在您的情况下为 2。
另一种方法是使用
a=s[0]; // Assign first character in `s` to `a`
b=s[1]; // Assign second character in `s` to `b`
如果你需要一个字符一个字符地读取每个单词并处理它们,那么更好的方法是使用'\0'检查循环读取带有终止条件的字符串
while ('[=10=]' != *s)
{
//process each char
s++
}
发生这种情况是因为 sscanf 在两次调用中都读取了字符串 s 的第一个字符。
就像之前的答案所说的解决方案是使用:
sscanf(s,"%c%c", &a, &b);
在这种情况下sscanf会读取第一个字符并将其赋值给变量a,然后sscanf会继续读取字符串并找到下一个字符。
基本上,每次对字符串调用 sscanf 时,它都会从字符串的开头开始。
希望它能帮助您理解为什么这种行为一点也不奇怪。
它打印 aa
因为这正是您所要求的。
你觉得怎么样:
sscanf(s,"%c", &b);
行为不同于:
sscanf(s,"%c", &a);
如果要扫描字符串的不同部分,则必须将不同的字符串传递给 sscanf
。
if(1 == sscanf(s,"%c", &a))
sscanf(s+1,"%c", &b);
但老实说,如果你需要通过 char
解析字符串 char
只需使用指针算法...
我必须按顺序扫描字符串中的字符,但在那个例子中
char s[8]={"ab"};
char a,b;
sscanf(s,"%c", &a);
sscanf(s,"%c", &b);
printf("%c%c", a, b);
它打印 aa。但我需要它打印 ab。我该如何解决?我应该将字符串打印到文件并从文件中读取吗?
使用
sscanf(s,"%c%c", &a, &b);
您还可以检查 sscanf
的 return 值,以确保它成功地从 s
中提取了两个字符。 sscanf
returns 扫描和分配的字符总数,在您的情况下为 2。
另一种方法是使用
a=s[0]; // Assign first character in `s` to `a`
b=s[1]; // Assign second character in `s` to `b`
如果你需要一个字符一个字符地读取每个单词并处理它们,那么更好的方法是使用'\0'检查循环读取带有终止条件的字符串
while ('[=10=]' != *s)
{
//process each char
s++
}
发生这种情况是因为 sscanf 在两次调用中都读取了字符串 s 的第一个字符。
就像之前的答案所说的解决方案是使用:
sscanf(s,"%c%c", &a, &b);
在这种情况下sscanf会读取第一个字符并将其赋值给变量a,然后sscanf会继续读取字符串并找到下一个字符。
基本上,每次对字符串调用 sscanf 时,它都会从字符串的开头开始。
希望它能帮助您理解为什么这种行为一点也不奇怪。
它打印 aa
因为这正是您所要求的。
你觉得怎么样:
sscanf(s,"%c", &b);
行为不同于:
sscanf(s,"%c", &a);
如果要扫描字符串的不同部分,则必须将不同的字符串传递给 sscanf
。
if(1 == sscanf(s,"%c", &a))
sscanf(s+1,"%c", &b);
但老实说,如果你需要通过 char
解析字符串 char
只需使用指针算法...