scanf()格式字符串中的普通字符

发布时间 2023-04-17 19:46:18作者: Hello_world_名字被取了

scanf() 函数中的输入控制符为 %c 时,用户输入应与引号“ ”中的内容一致

当%c前无空格时:

scanf("%c",&i);

scanf会读取第一个用户输入的值,就算用户输入的是空格、制表符或回车也会读取

当%c前有空格时:

scanf(" %c",&i);

scanf() 函数会将 " %c" 中的空格识别为空白字符(空格、制表符和回车),也就是说用户在输入正确的输入控制符之前会将所有的空格、制表符和回车视为空白字符(将所有挨在一起的这三类的视为一个整体,也就是" %c"中的空格)

# include <stdio.h>
int main(void)
{
    int i,j;
    char ch1,ch2;

    i = scanf(" %c %c",&ch1,&ch2);
    printf("%c %c %d\n",ch1,ch2,i);
}

PS C:\Users\14141\Desktop\vscode_c\test01> .\test6.exe




g
   


f
g f 2

可以看到用户输入的格式是和scanf()内的格式相吻合的:

用户在红框内的区域输入了若干空格、制表符和回车,scanf() 函数将其视为一个整体,对应着scanf() 中第 1 个 %c 前的空格,直到用户输入正确的输入控制符 ‘g’ ;

用户在蓝框内的区域同样也输入了若干空格、制表符和回车,scanf() 函数将其视为一个整体,对应着scanf() 中第 2 个 %c 前的空格,直到用户输入正确的输入控制符 ‘f’ ;

而像%d之类的其他输入控制符就不会有这样的问题,,它们都会自动跳过待输入值前面的空白:

#include<stdio.h>
int main()
{
	printf("int:\n");
	  int a ,b;
	  scanf("%d%d",&a,&b);
	  printf("%d %d\n",a,b);
}

可以看到在 scanf("%d%d",&a,&b); 内是没有多余的 非输入控制符 的,可我们在两个 %d 之前都留下了空格制表符和回车,scanf 并没有理会这些空白,直到遇到正确的输入控制符