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