如何在不使用循环的情况下使用C中的scanf函数扫描以space分隔的姓名和姓氏并将其保存在一个变量中?

How to scan name and surname separated with space with scanf function in C without using loop and save it in one variable?

我尝试使用 %[],但 VSC 立即将 % 涂成红色并报告错误。

您可以使用 scanf() 以这种方式读取带有嵌入空格的字符串:

char fullname[100];

if (scanf("%99[^\n]", fullname) == 1) {
    printf("The full name is: %s\n", fullname);
} else {
    // either end of file was reached, scanf returned EOF
    // or no character was typed before the newline
    printf("input error\n");
}
// read and discard the rest of the line
scanf("%*[^\n]");  // discard the remaining characters if any
scanf("%*1[\n]");  // discard the newline if any

原因 Visual Studio 代码显示错误是语法 %[] 无效。您不能指定一个空集。 %[ 之后的 ] 被解释为 ] 字符,并且必须有另一个 ] 来关闭集合,如 %[]].

scanf() 充满了怪癖和陷阱:使用 fgets()getline() 读取一行输入然后执行显式清理字符串似乎更容易和更安全从用户那里读取,例如删除开头和结尾的空格,这在大多数情况下需要一个循环。

最后,我得出的结论是程序运行良好,VSC 无缘无故地将“%”涂成红色。感谢您的回答,它们很有用。