C 如何识别字符串中第一个单词后的空格?

C 如何识别字符串中第一个单词后的空格?,c,C,我创建了一个非常简单的程序,它应该匹配第一个单词(“abc”)以空格结尾的字符串。例如,如果我写“abc defg”,我应该会收到一个匹配,因为“abc”和空白。如果我写“abcdefg”,我不应该写,因为没有空格 我想我的第一个解决方案没有真正起作用,因为空白根本不是字符(?)。因此,我在IF语句中使用第二个条件创建了下面的第二个解决方案,但是,它也不起作用 知道如何识别字符串末尾的空格吗 int main(void) { while(1) { char st

我创建了一个非常简单的程序,它应该匹配第一个单词(“abc”)以空格结尾的字符串。例如,如果我写“abc defg”,我应该会收到一个匹配,因为“abc”和空白。如果我写“abcdefg”,我不应该写,因为没有空格

我想我的第一个解决方案没有真正起作用,因为空白根本不是字符(?)。因此,我在IF语句中使用第二个条件创建了下面的第二个解决方案,但是,它也不起作用

知道如何识别字符串末尾的空格吗

int main(void) 
{
    while(1)
    {
        char str[30];

        scanf("%s", str);

        char *word = "abc ";      <------------ QUESTION HERE

        // If two first three letters are "abc" + white space
        if(strncmp(str, word, 4) == 0) {

            printf("Match\n");

        } else {

            printf("No match\n");

        }
    }

}
我想我的第一个解决方案没有真正起作用,因为空白根本不是字符(?)

当然,空白是一个字符-事实上,一组字符被认为是空白。但是,对于
scanf
,空格字符起着特殊的作用:除了少数特殊情况外,它用于分离使用格式字符串解析的输入

这就是为什么您不能使用
%s
scanf
中获取
“abc”
:尾部的空格将始终被忽略,因此这两种方法都不起作用

这将有助于:

char buf[100], ch;
scanf("%99s%c", buf, &ch);
if (strcmp(buf, "abc") == 0 && ch == ' ') {
    printf("Yes!\n");
}
其思想是在
%s
捕获到变量后立即读取字符,并将该变量与空格字符
'
进行比较

注意使用
%99s
将输入的大小限制为缓冲区的分配长度(加上空终止符的附加字符)


重要提示:不言而喻,您需要检查
scanf
的返回值,以查看是否存在针对所有格式说明符的一些输入。在上述情况下,您需要检查
scanf
的返回值是否为
2

尝试此
printf(“str=\%s\“\n”,str)
第二个解决方案中的
abc[3]
是什么,不应该是
isspace(str[3])
?顺便说一句:
scanf(“%s”…
将不会在空白处读取,但将在Forestephan:是的,我更改了它之前停止读取。Tormund:将尝试并返回。您应该检查scanf返回代码的可能重复项;如果输入中没有空白,您将比较未初始化的值(或者两个,如果输入为EOF)。非常感谢!)事实上,当我用单引号('abc')代替双引号时,我甚至成功地隔离了问题,但最终我没有将解决方案转移到这个特定的函数中。我想这是幸运的,因为我不知道我在做什么…@rici对,我在底部加了一个便条提到这一点。谢谢大家!@Lavonen在多个字符周围使用单引号,如
'abc'
,这是您很少需要的。感谢您的帮助:)
char buf[100], ch;
scanf("%99s%c", buf, &ch);
if (strcmp(buf, "abc") == 0 && ch == ' ') {
    printf("Yes!\n");
}