使用scanf的字符串读取问题

| 现在我读了一些:   scanf()转换%[\\ n]将   匹配换行符,而   %[^ \\ n]将匹配所有字符,直到   换行符。 但是在下面的代码中:
#include<stdio.h>


int main() {
printf(\"Enter Something: \");
char name[100];   
scanf(\"%99[help]\", name);
printf(\"%s\",name);
}
当我输入
help me
时,我不会遇到任何问题,因为打印的单词是
help
。但是,当我输入
I need help
时,它会打印垃圾。请帮助如何解决此问题? 我的目标是匹配在输入中任何地方输入的单词“ 2”,例如,
\"This is a test, i need help in this\"
应该检测
help
。     
已邀请:
您需要检查
scanf
的结果。如果匹配失败,则不会修改您传入的指针。在您的特定情况下,“ 8”将包含任意数据。 检查
scanf
的输出后,您会发现它在该字符串上不匹配。
scanf
不是正则表达式解析器。它将仅尝试在输入流上看到的第一个\“ item \”进行匹配。 匹配说明符
%99[help]
表示\“我想以任意顺序匹配包含字母h,e,l,p的任何内容,最长为99个字符”。就这样。因此,它在您输入的第一个字母(\“ T \”)上失败,该字母不在集合中。 如果要在另一个字符串中查找一个字符串,请使用
strstr
。要阅读整行,如果您的环境允许,最简单的方法是使用
getline
。     
您需要使用scanset来识别您可能输入的所有字符。您还需要检查
scanf()
的返回值以查看是否成功。
#include <stdio.h>

int main()
{
    printf(\"Enter Something: \");
    char name[100];   
    if (scanf(\"%99[Indhelp ]\", name) != 1)
        fprintf(stderr, \"scanf() failed\\n\");
    else
        printf(\"%s\",name);
    return 0;
}
这将识别出“我需要帮助”和许多其他短语。 C标准说:   如果-字符在扫描列表中,并且不是第一个字符,也不是   第二个字符,第一个字符是^,最后一个字符也不是,则行为是   实现定义的。 在许多实现中,可以使用诸如“ 16”之类的符号来拾取字母或空格字符串。但是,这是实现定义的行为。这意味着它可以执行实现选择的任何操作,但是实现必须记录其含义。 写入扫描集的可靠方法是:
%[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ ]
当然,这给您带来了标点符号方面的一些问题,更不用说重音符号了。您可以根据需要将两者都添加到扫描集中。     

要回复问题请先登录注册