scanf,fgets,gets的用法及注意事项!如何才能实现带空格的输入数据

您所在的位置:网站首页 c语言跳过空格 scanf,fgets,gets的用法及注意事项!如何才能实现带空格的输入数据

scanf,fgets,gets的用法及注意事项!如何才能实现带空格的输入数据

2023-10-21 14:02| 来源: 网络整理| 查看: 265

scanf 是从标准输入流stdio (标准输入设备,一般指向键盘)中读内容的通用子程序,可以说明的格式读入多个字符,并保存在对应地址的变量中。

第一个参数指定输入的格式(%c——字符,%s——字符串,%d——十进制整型数,%p——指针值(内存地址),%x——十六进制整数)

第二个参数是将从键盘输入的数据存放在的已定义的对应变量中,变量名前需加上取地址符 &(只有一个例外:字符数组变量不用加 &),否则会有段错误。

例子:int count;scanf("%d",  &count);

scanf在往字符数组内输入数据时会存在溢出现象,造成段错误。

像上面例子里的写法,scanf在读取键盘输入时,遇到空格和回车符时会结束读取,完成存放数据操作;按完回车后,回车符会存在缓冲区中,所以只能实现一次读取(已回车为结束标志),多次操作可以如下方式实现:

int a, b, c;scanf("%d%d%d", &a, &b, &c);或者scanf("%d,%d,%d", &a, &b, &c)(ps:键盘输入时,两个数据间也要加上,以作区分)

实现多次输入时字符时,scanf会将回车符当成第二个字符输入,第二个字符变量并不能被赋值,解决方法:

        char a; char b; scanf ("%c",  &a); while (  scanf  ("%c",  &b)  !=  '\n') { scanf("%c",&b); break; } putchar(a);

putchar(b);

也可以用getchar()来吃掉缓冲区的回车符

如果希望scanf可以实现带空格的输入,可用char str[100];;scanf (" %[^\n] ", str );

gets

gets()函数和scanf一样可以从键盘获取字符串,但是gets函数只认为回车是输入结束标志,空格不会作为结束标志

gets不能用类似“%s”或者“%d”之类的字符转义,只能接受字符串的输入

char s[100] = { 0 };

    gets(s);//gets认为回车是输入结束标示,空格不是输入结束标示,所以用gets这个函数就可以实现输入带空格的字符串

    //gets和scanf一样存在缓冲区溢出的问题

    int i;

    for (i = 0; i 0};

// 第一个参数是char的数组,第二个参数是数组的大小,单位:字节,

// 第三个参数stdin代表标准输入的意思

// fgets是安全的,不存在缓冲区溢出的问题,只要保证第二个参数小于等于数组实际的大小,就能避免缓冲区溢出问题

// fgets会将回车键读到数组里

fgets(s, sizeof(s)/sizeof(char), stdin);

printf ("%s\n", s);



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3