c中scanf函数的格式说明符中%c规范之前的空格
当我在以下程序中的c中scanf函数的格式说明符中%c规范之前的空格,c,character,scanf,format-specifiers,C,Character,Scanf,Format Specifiers,当我在以下程序中的scanf()函数的格式字符串中不包含%d和%c规范之间的空格,并且在运行时将输入设为“4h”时,则输出为“Integer=4,Character=” 在这种情况下,变量“c”的输入准确程度如何?如果在%d和%c规范之间包含空格,会有什么区别 代码 #包括 int main() { 字符c; int i; printf(“输入整数和字符:\n”); scanf(“%d%c”、&i和&c); printf(“整数=%d和字符=%c\n”,i,c); getch(); } sca
scanf()
函数的格式字符串中不包含%d
和%c
规范之间的空格,并且在运行时将输入设为“4h”时,则输出为“Integer=4,Character=”
在这种情况下,变量“c”
的输入准确程度如何?如果在%d
和%c
规范之间包含空格,会有什么区别
代码
#包括
int main()
{
字符c;
int i;
printf(“输入整数和字符:\n”);
scanf(“%d%c”、&i和&c);
printf(“整数=%d和字符=%c\n”,i,c);
getch();
}
scanf中%c
说明符前面的空格指示它跳过任意数量的空格。换句话说,从标准输入读取,直到找到非空格字符或键盘中断为止。如果仔细阅读规范,大多数格式说明符跳过前导空格。在Stan中dard C,有三个不符合要求:
-到目前为止已处理了多少个字符%n
-扫描集%[…]
-读取字符%c
%C
,相当于%lc
)
除非转换规范包括[
、c
、c
或n
转换说明符,否则应跳过输入空格字符(如isspace
所规定)
在%d
和%c
之间添加空格意味着在读取整数之后和(非空格)字符之前跳过可选的空格
请注意,格式字符串中的文字字符(除空格外-例如,
“X%dY”
中的X
和Y
)不会跳过空格。匹配此类字符也不会被视为成功转换;它们不会影响scanf()的返回值
等。这意味着,当我不使用%d和%c规范之间的空格时,当将输入作为“4h”时,编译器将分配“空格”"对于char变量“c”,我是否正确???@Shubhamdubey2111;是的。完全正确。此外,如果两个整数而不是一个字符和一个整数,则包含/排除空格不会影响程序。为什么?这仅适用于%c
说明符?当然不会消耗前导空格,它适用于至少两个其他格式说明符另外,如果使用两个整数而不是一个字符和一个整数,则包含/排除空格不会影响程序。为什么???@Shubhamdubey2111答案在于“如果仔细阅读scanf()的规范,大多数格式说明符(如%d)都会跳过前导空格。在标准C中,有三种格式说明符不会:好的,现在我明白了。Thanks@petercordes我打开了它,因为我认为这是另一个我再次遇到的情况,即在一行中放置%c
,没有前面的空格,因此“缓冲区中的换行符”毫无疑问所以它有些不同。@AnttiHaapala:我想我把它作为的副本关闭了,因为最终的问题是相同的:%c
本身(与其他转换不同)如果这是下一个字符,将读取一个空格。但是格式字符串中的文本空格会占用任意数量的空白。不过,重新打开也可以;这里的答案很好。
#include <stdio.h>
int main()
{
char c;
int i;
printf("Enter an Integer and a character:\n");
scanf("%d %c",&i,&c);
printf("Integer = %d and Character = %c\n",i,c);
getch();
}