【问题标题】:How to get specific part of the string using sscanf function?如何使用 sscanf 函数获取字符串的特定部分?
【发布时间】:2020-04-08 13:39:33
【问题描述】:

我在正确读取用户输入时遇到问题。

用户输入"A Smaug 23 fire 10",我需要获取除第一个字母'A'之外的所有信息到我的代码中。

char buffer[80];
char *ret = fgets(buffer, 80, stdin)
if (ret == NULL){
     break;
}
char name[10],weapon[10];
int attackpoints, hitpoints;
int x = sscanf(ret," %s %d %s %d", name, &attackpoints,weapon,&hitpoints);

这行不通。

如何跳过A 并将用户输入存储到正确的变量中,例如name = Smaugattackpoints = 23weapon = fire 等?

【问题讨论】:

  • int x = sscanf(ret," %*s %s %d %s %d", name, &attackpoints, weapon, &hitpoints); 这样的* 的第一个说明符读取但忽略(几个)字符。

标签: c string scanf


【解决方案1】:

您只需为第一个字母添加字符串A[2]。读取所有字符串并打印所有值,期望 A:

char A[2], name[10],weapon[10];
int x = sscanf(ret,"%s %s %d %s %d", A, name, &attackpoints,weapon,&hitpoints);

完整代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
    char buffer[80];
    char *ret = fgets(buffer, 80, stdin);
    if (ret == NULL)
         exit(-1);
    char A[2], name[10],weapon[10];
    int attackpoints, hitpoints;
    int x = sscanf(ret,"%s %s %d %s %d", A, name, &attackpoints,weapon,&hitpoints);
    if (x != 5)
        exit(-1);
    printf("name = %s, attackpoints = %d, weapon = %s, hitpoints = %d\n", name, attackpoints, weapon, hitpoints);
    return 0;
}

输入输出:

./test 
A Smaug 23 fire 10
name = Smaug, attackpoints = 23, weapon = fire, hitpoints = 10

【讨论】:

  • 好的,我认为可以通过其他方式完成,但这也很好。
  • @konde020202:它可以以另一种方式完成,例如通过在 scanf 格式字符串的开头有一个文字 "A " ,输入必须匹配,然后 scanf 将继续进行以后的转换。请参阅文档,例如en.cppreference.com/w/c/io/fscanf 提到文字非空白字符。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-03
  • 1970-01-01
  • 2021-08-12
  • 2021-09-26
相关资源
最近更新 更多