gpt4 book ai didi

C 从控制台读取带有空格的多个单词/参数

转载 作者:行者123 更新时间:2023-11-30 16:09:16 24 4
gpt4 key购买 nike

您好,我是 C 语言新手,我希望用户输入类似 inspect 2 的内容来显示该示例中位置 2 处的数组值。

我无法让它工作

    char input[20];
scanf("%s", input);

if (strcmp(strtok(input, " "), "inspect") == 0) {
char str[20];
int idx;
printf("input was %s", input);
idx = sscanf(input, "%s %d", str, &idx);
}

它总是打印input wasspect但是后面的空格和数字没有被读取?检查用户是否输入“inspect”并获取他随后输入的索引(就像我想做的那样)的正确方法是什么?

谢谢

最佳答案

你的选择很少,但你想选择一个而不是把它们混在一起。

要读取输入,请考虑使用 fget。更安全,需要处理的异常(exception)情况更少。我列出了等效的 sscanf,但它更难使用。他们都会带来完整的“输入”行。请注意,fgets 还将包含尾随的新行。

   // make buffer large enough.
char input[255] ;

if ( fgets(input, sizeof(input), stdin) != NULL ) {
...
}

// OR
if ( sscanf("%19[^\n]", input) = 1 ) {
} ;

用于解析:解析输入字符串的选项很少。

在选项之间,我会投票给 sscanf,因为它提供了针对错误输入、溢出等的最多验证和保护。当 strtok 返回时,strcmp(strtok(...)) 很容易导致 SEGV 错误空。

使用 sscanf

  if ( sscanf(input, "inspect %d", &idx) ==1 ) {
... Show Element idx
} ;

使用 strtok/strcmp

  if ( strcmp(strtok(input, " "), "inspect") == 0 ) {
if ( sscanf("%d", strtok(NULL, " "), &idx) == 1 ) {
.. Show element idx
} ;
} ;

使用 strtol

  if ( strcmp(strtok(input, " "), "inspect") == 0 ) {
char *stptr = strtok(input, " "), *endptr = NULL ;
idx = strtol(stptr, &endptr, 10) ;
if ( endptr != stptr ) {
.. Show element idx
} ;
} ;

关于C 从控制台读取带有空格的多个单词/参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59181397/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com