问题描述
scanf输入字符串(含有空格的字符串,例如:“I love you!”)时,总是在空格处停止扫描。我们用scanf(“%s”,str);输入 “I love you!” 字符串后,str输出却只有 “I” ,这并不是我们想要的。这是因为scanf扫描到 “I” 后面的空格,就认为对str的扫描结束(即空格没有被扫描),并舍弃后面的” love you!”,只得到了 “I” 。
解决办法
在这里给出了两种解决办法,可以让空格也被扫描到str里。
- gets()函数 ,用gets()替代scanf();
gets可以无限读取字符串,不会判断上限,以回车结束读取。其用法为gets(s),其中s为字符串变量(字符串数组名或字符串指针)。简单的理解就是读入一串字符(遇到回车结束),存到s中。
#include<stdio.h> int main() {
char str[50]; gets(str); printf("%s\n",str); return 0; }
- scanf(“%[^\n]”,str) ,遇到”\n”结束
‘^’含有非的意思
“%[^\n]“即遇到\n结束。
如果使用”%[^v]”,那我们输入 “I love you!” ,输出的就是 “I lo” ,现在能懂这个非的意思了吧…
#include<stdio.h> int main() { char str[50]; scanf("%[^\n]",str);//"%[^v]" printf("%s\n",str); return 0; } 总结
简单的给出了两种我平时使用scanf时遇到空格的处理方法,希望能对你也有所帮助。
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/229711.html原文链接:https://javaforall.net
