一.问题描述:
在c语言当中使用scanf进行输入字符串时,遇到空格会停止输入,如下面的例子。
#include<stdio.h>
int main(){
char s[30];
scanf("%s",s);
printf("%s",s);
return 0;
}
如下图可看出当输入“Hello world !”时,从输出可以看出只能读入“Hello”。
二.原因:
在C语言中,scanf
函数遇到空格、制表符或换行符时会停止读取输入。
三.本文给出如下解决方案:
1.使用gets
函数(不推荐,因为gets
存在缓冲区溢出的风险):
#include<stdio.h>
int main(){
char s[30];
gets(s);
printf("%s",s);
return 0;
}
如下图当输入“Hello world !”时不会因为遇到空格会停止读取的状况。
2.使用fgets
函数(推荐,因为它可以指定最大字符数,避免缓冲区溢出):
#include<stdio.h>
int main()
{
char str[30];
fgets(str,sizeof(str),stdin);
printf("%s",str);
return 0;
}
如下图当输入“Hello world !”时不会因为遇到空格会停止读取的状况。
3.使用scanf
配合循环和临时变量(适用于需要逐个处理单词的情况):
//采用c++解决
#include<iostream>
#include<cstring>//使用头文件引入strcat函数
int main() {
char str[30]="",temp[30],a;
while(1){
scanf("%s",temp);
strcat(str,temp);//将temp拼接到str后面
a=getchar();
if(a=='\n'){
printf("%s",str);
return 0;
}
strcat(str," ");
}
}
4.使用%[^ ]格式可以用来进行多个字符的输入,并对结束符进行自定义
#include<stdio.h>
int main(){
char str[100];
scanf("%[^\n]",str);
printf("%s",str);
return 0;
}
标签:char,int,scanf,空格,str,include,输入
From: https://blog.csdn.net/m0_74098553/article/details/141155300