scanf用法及常见输入错误问题

scanf()函数是通过终端格式化输入函数,它从标准输入设备(键盘)读取输入信息。可以读入任何固有类型的数据并自动把数值转变成适当的机内格式。
例1.

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

支持以下几种输入
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
所以:当使用"%d%d%d"这种输入格式时,输入可以是一个空格或者多个空格、tab键、回车键分割。输出都是正确的。
例2.

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

允许的输入方法:
在这里插入图片描述
在这里插入图片描述
所以:"%d,%d,%d"格式与"%d%d%d"格式基本相同,不同之处在"%d,%d,%d"这种格式在输入时“,”一定要紧跟输入的数字。
这里输入的","一定要是英文的
例3.

int main()
{
	int a, b, c;
	scanf("a=%d,b=%d,c=%d", &a, &b, &c);
	printf("%d,%d,%d\n", a, b, c);
	system("pause");
	return 0;
}

在这里插入图片描述
这里输入也要相互对应
例4.

#include<stdio.h>
int main()
{
	char a, b, c;
	scanf("%c%c%c", &a, &b, &c);
	printf("%c,%c,%c\n", a, b, c);
	system("pause");
	return 0;
}

这里输入时存在空格,换行等转义字符问题。因为在"%c"输入时,空格和转义字符均作为有效字符。
例如:
在这里插入图片描述
这说明在接收时将空格作为一个字符进行接收了(a->1,b->" ",c->2),其余的被丢弃。
还有类似的问题:

#include<stdio.h>
int main()
{
	int a;
	char c;
	scanf("%d", &a);
	scanf("%c", &c);
	printf("a=%d,  c=%c,\n", a, c);
	printf("c=%d\n", c);
	system("pause");
	return 0;
}

在这里插入图片描述
这里输入:1回车就会出现如上结果,
这是因为scanf()从键盘接受数据将回车[\n]也接受了,所以c=’\n’,最后%d输出c的值就是10;
解决办法:

1.在接收第二个数之前清空缓冲区,fflush(stdin);getch();getchar();随便一个都可以,fflush(stdin)是全部清空,getchar()是清空一个字符,如果缓冲区还有多余的字符则会被正常使用,
2.在%c之前加入空格,空格可以吸收回车符、空格。

加getchar()

#include<stdio.h>
int main()
{
	int a;
	char c;
	scanf("%d", &a);
	getchar();
	scanf("%c", &c);
	printf("a=%d,  c=%c,\n", a, c);
	printf("c=%d\n", c);
	system("pause");
	return 0;
}

在这里插入图片描述
加空格

#include<stdio.h>
int main()
{
	int a;
	char c;
	scanf("%d", &a);
	scanf(" %c", &c);
	printf("a=%d,  c=%c,\n", a, c);
	printf("c=%d\n", c);
	system("pause");
	return 0;
}

在这里插入图片描述

例5
scanf()函数不能正确接收有空格的字符串问题。

	char arr[20];
	scanf("%s", arr);
	printf("%s", arr);
	system("pause");
	return 0;

在这里插入图片描述
在scanf()函数接收输入数据时,遇到以下问题结束一个数据的输入:

1.遇见空格、回车、跳格
2.遇见宽度
3.遇见非法输入

所以不能成功接收有空格的字符串。
解决方法:
使用%[ ](扫描字符集合),可以用来进行多个字符串的输入,并对结束符进行自定义。对于%[ ]可以用^+结束标志(可以使任意字符,代表着输入这个字符就终止对字符串的读取)。

char arr[20];
	scanf("%[^\n]", arr);
	printf("%s", arr);
	system("pause");
	return 0;

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_39032310/article/details/83692703