如何用sscanf从分号分隔的字符串中读出数据?

问题描述 投票:0回答:1

我想从分号分隔的字符串中读取数据但是出了点问题...

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);

}
c scanf
1个回答
-1
投票

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] = ' ';
 }
}
© www.soinside.com 2019 - 2024. All rights reserved.