我想从分号分隔的字符串中读取数据但是出了点问题...
int main(){
char str[] = "1;What is your name?;Alex;Daniel";
int n;
char question[50];
char A[30];
char B[30];
sscanf(str,"%d;%s;%s;%s",&n,question,A,B);
}
sscanf IBM Documentation输入字段定义为:
- 遇到空白字符(空格,制表符或换行符之前的所有字符)
- 直到遇到无法根据转换规范转换的字符为止的所有字符
- 所有字符,直到达到字段宽度。
问题是sscanf函数不会在分号处停止。它会停在空白字符处。因此,使用空格代替分号将是一个可行的解决方案。
编辑:看到user3121023的评论后,我意识到使用特定的设置也将有所帮助。同样,此方法可能会使您的代码混乱。为什么不只使用空格。即使您以给定格式输入的内容也会将分号转换为空格。然后使用sscanf。完整代码如下:
#include <stdio.h>
#include <string.h>
int main(){
char str[] = "1;What is your name?;Alex;Daniel";
int n;
char question[50];
char A[30];
char B[30];
sscanf(str,"%d;%49[^;]%49[^;]%s",&n,question,A,B);
printf("n:%d question:%s A:%s B:%s", n, question, A, B);
}
void convert_semicolons_to_whitespaces(char string[])
{
int length = strlen(string);
for (int i = 0; i < length; ++i)
{
if (string[i] == ';') string[i] = ' ';
}
}