解决scanf获取输入数据时,遇到空格结束的问题 您所在的位置:网站首页 scanf不能输入字符串 解决scanf获取输入数据时,遇到空格结束的问题

解决scanf获取输入数据时,遇到空格结束的问题

2024-01-17 07:51| 来源: 网络整理| 查看: 265

先简单了解一下scanf函数:

函数原型:int scanf(const char *format, ...);

参数:要注意的是变量前面的取地址符&不要忘记 返回值 :返回的是正确按指定格式输入变量的个数,也就是能正确接收到值的变量个数

#include int main(int argc, const char **argv) { int a=0,b=0,i=0; i = scanf("%d %d",&a,&b); printf("i = %d\n",i); return 0; }

以上代码 如果输入:4 5,则输出结果为:i = 2 如果输入:4 k,则输出结果为:i = 1 因为a和b都是整型数据,输入的k为字符,故正确接收到的变量就只有a,所有才输出 i = 1

回归正题,请看以下代码

#include int main(int argc, const char **argv) { char buf[20]={0}; printf("输入一串字符:"); scanf("%s",buf); printf("buf = %s\n",buf); }

如果输入字符串为:abcd ,返回的结果无疑是:buf = abcd 那如果输入字符串:a b c d 呢,返回的结果则为:buf = a

这是因为: scanf的读取原理是匹配字符,当scanf从缓冲区读取数据时遇到空格和回车键则会认为读取完毕

因此有以下几种方式解决 (1)使用gets(buf); 替换scanf("%s",buf);即可,但是编译时系统会报警告,说它不安全,因为gets()不能指定获取数据的长度,故可使用fgets()

(2)使用fgets(buf,20,stdin); 替换scanf("%s",buf);即可

函数原型:char *fgets(char *s, int size, FILE *stream); 参数说明: char *s :存储读到的数据的首地址,这里是buf int size:存储空间的大小,这里是20 FILE *stream:读的目标文件的文件流,这里是stdin 返回值: 成功返回一个指针,指向字符串中第一个字符的地址 失败/读到末尾,返回NULL

(3)使用scanf("%[^\n]",buf); 替换scanf("%s",buf);即可 这是从一些大牛们的博客找到的方法,一开始并不理解为什么这样就可以,后来找到在这篇博客有说到https://blog.csdn.net/qq_30007603/article/details/81164232

总结为:[^\n]的意思是scanf遇到\n才停止读取,需注意的是,使用 scanf("%[^\n]",buf)后,buf中存放的字符串末尾是没有‘\n’的。

要想知道更多关于scanf的用法和注意事项可以看看: http://c.biancheng.net/view/160.html

https://www.cnblogs.com/windpiaoxue/p/9184194.html



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有