C语言 如何用scanf函数输入带空格的字符串

scanf的返回值是正确输入的参数个数。

scanf()函数接收输入数据时,遇以下情况结束一个数据的输入:

(1)遇空格、“回车”、“跳格”键;

(2)遇宽度结束;

(3)遇非法输入。

以下这段代码:

//vs可自定义加注释(在选项中更改),我的是ctrl+q,可选中多行加注释,alt+回退键=撤销
#include
int main() {
	char c[20];
	printf("请输入一串英文:");
		scanf_s("%s", c,20);//加上不超过数组的大小才能正常输出且不能超过数组长度
		printf("输入的字符为:%s\n", c);
	return 0;
}

遇到空格则判定输入结束,后续不再接收:
在这里插入图片描述

只能输入不带空格的一串字符,且输入的字符串超出定义的参数长度,则无法正常输出:
scanf_s(“%s”, c,10);
在这里插入图片描述
超过数组定义的长度,会直接出弹窗警告:
C语言 如何用scanf函数输入带空格的字符串_第1张图片
在这里插入图片描述

解决方法1:定义多个数组用于存储字符串

//因为scanf遇到空格就认为输入结束,因此,想要输出i am student,可以试试定义三个字符串:
#include 
 int main()
{
	  char str1[10], str2[10], str3[10];
	  printf("请输入字符串:");
	     scanf_s("%s%s%s", str1,10, str2,10, str3,10);
	    printf("输出结果:%s %s %s\n", str1, str2, str3);//%s间要加空格
	     return 0;
	 }

在这里插入图片描述

方法2:%[]的格式控制法:%[scanfset]
scanfset有两种形式:

一种是以非“^”字符开头的scanset ,表示在读入字符串时将匹配所有在scanfset中出现的字符,遇到非scanfset中的字符时输入就结束;

一种形式是以“^“字符开头的scanfset,表示在读入字符串时将匹配所有不在scanfset中出现的字符,遇到scanfset中的字符输入就结束。

上面的代码经过处理后就可以实现,字符串中带有空格输入:

#include
int main()
{
	char str[80];
	scanf_s("%[^\n]", str,80);//记得给scanf_s指定一个参数(范围)
	printf("%s\n", str);
	return 0;
}

在这里插入图片描述

如果想用%c输出带空格的字符,只能利用循环逐个输出:


#include
int main() {
	char c[20]="i am student.";
	for (int i = 0; i < 20; i++) {
		printf("%c", c[i]);	
	}
		printf("\n");
	return 0;
}

C语言 如何用scanf函数输入带空格的字符串_第2张图片
用scanf函数输入,判断输入字符长度,决定终止位置。

//我自己写的,非完美答案
#include
#include 
int main() {
	char c[20]; int i = 0;
	int strLen=0;
	scanf_s("%[^\n]", c, 20);
	strLen = strlen(c);
	for (int i = 0; i < strLen; i++) {  //获取输入的字符串长度
		if(c[i]!='\n')   //不回车,就认为还在输入,避免空格影响判断
		printf("%c", c[i]);	
	}
		printf("\n");
	return 0;
}

C语言 如何用scanf函数输入带空格的字符串_第3张图片

字符%c输出和字符串%s输出是有区别的,%c会输出定义的数组长度的字符,也就是如果输入长度小于定义数组长度,后面会补上一些乱七八糟的字符填充够数组的长度;
类似这样:
C语言 如何用scanf函数输入带空格的字符串_第4张图片

%s是遇到‘\n’则知道终止位置,就会停止输出。

你可能感兴趣的:(C语言,c语言,c++,开发语言)