我对这种语法感到困惑。起初,我以为是书的印刷错误。但是,在编程了很长一段时间后,我才知道它们有不同的含义。尽管如此,我还是无法对该语法有清晰的认识。
同样,有什么区别:
gets( str);
和
gets(str);
空格重要吗?如果是,那么如何?
格式字符串中的空格(例如空格、制表符或换行符)与输入中的任意数量的空格匹配,包括none。
http://www.manpagez.com/man/3/scanf/
在gets
空间中没有任何意义。它在编译时被忽略。
编译器有很多阶段,在第一阶段词法分析中,所有不必要的空格都被删除了,这也是当时将被删除的不必要的空格,因此,gets(a) and gets( a)
.
这里有两个关于 scanf 的重要知识:
您可以显式调用此忽略所有空格的行为,如下所示:
scanf(" %c", &mychar)
scanf("\n%c", &mychar)
scanf("\t%c", &mychar)
也就是说,转换字符串中的任何空格字符(包括空格)都会指示 scanf 忽略任何和所有空格,直到扫描的项目。
scanf("%s")
由于除 %c 和 %[ 之外的所有转换修饰符都会自动执行此操作,因此关于vs的原始问题的答案scanf(" %s")
是没有区别。
我建议阅读 C 常见问题解答中的所有 scanf 问题并编写一些测试程序以更好地掌握所有内容: