while循环输入字符串中以Esc键作为循环结束标识——scanf读取带空格字符串
2016-08-30 22:50
561 查看
需求
在一个字符串输入循环中,判断输入的是字符串还是Esc按键,如果是Esc按键则结束循环。代码:
#include<stdio.h> int main() { char buf[16]; while(1){ scanf("%[^\n]%*c",buf); if(27 == buf[0]){ break; } printf("%s\n",buf); } return 0; }
此时可通过Esc+Enter退出循环。
Esc的Ascii码为27.
scanf(“%[^\n]”,buf)表示读入一行字符串到buf里,字符串输入结束标识为回车键。^表示“非”,\n表示回车换行键。这是一个有趣的输入方法,输入内容由[]里决定,如scanf(“%[abcd]”,buf)表示只能输入abcd这四种字符,如果遇到其它字符scanf函数就会返回。
scanf(“%*c”)里,
*表示该输入项读入后不赋予任何变量,c表示一个字符,因此该语句表示读入一个字符,但不赋给任何变量(在scanf(“%[^\n]%*c”,buf)里用于读取输入遗留下来的\n)。
scanf(“%[^\n]%*c”,buf);就是将两者结合起来。
gets()函数也能实现获取一个带空格字符串的操作,但在Linux系统下使用该函数会得到一个警告:warning: the `gets’ function is dangerous and should not be used,原因在于Linux下gcc编译器不支持gets()函数,可以改用fgets()函数,但该函数又会导致其它问题:gets从终端读入的字符串用\0结束的,而fgets是以\n结束的(一般输入都用ENTER结束),所以strcmp两者的时候是不会相等的!
参考:http://blog.csdn.net/zx824/article/details/6859930
相关文章推荐
- 输入一行字符串分别统计出字母。数字。空格和其他字符 *利用while循环语句条件输入的字符为"\n"
- C语言技巧【枚举作为函数变量类型】【数据输入与输出】【do while循环体内scanf函数被跳过,循环结束】【用const修饰函数的参数】
- 用scanf获取一行包括空格的字符串,并指定以特定输入结束读入
- C语言:从键盘输入一个字符串,以感叹号!作为结束标志,将其中的小写字母全部转换成大写字母,然后输出到一个磁盘文件test中保存。
- while ((ch = getchar()) != EOF)中ch定义为char还是int型?cin、scanf等如何结束键盘输入
- 输入一行字符,分别统计出其中英文字母,空格,数字和其他字符的个数【while循环】
- while判断值为cin输入值时,注意调试时要用文件结束符结束循环
- 使用scanf_s输入得到一行带空格的字符串
- while循环中,用scanf输入一个float型的数字,如何让判断输入的是否为数字...
- java-第五章-while-输入一些整数,输入0结束循环,算出最大值最小值
- 编写程序:从键盘上输入若干个整数(以输入-1作为结束标识),输出这些数中的最大值和最小值,要求编写一个函数实现最大值和最小值的求取。
- 从键盘上输入一个后缀表达式,试编写算法计算表达式的值。规定:逆波兰表达式的长度不超过一行,以$符作为输入结束,操作数之间用空格分隔,操作符只可能有+、-、*、/四种运算。例如:234 34+2*$。
- 编写程序,循环接收用户从键盘输入多个字符串,直到输入“end”时循环结束,并将所有已输入的字符串按字典顺序倒序打印。
- while循环输入cin ,scanf()
- scanf输入含有空格的字符串
- 读取带空格字符串时候可以用while((c=getchar())!='\n') 2800:垂直直方图
- 以空格结束字符串输入
- scanf_s()函数—帮你解决带有空格的字符串的输入问题
- C++ 读取多行带空格的字符串,以EOF结束
- c语言中scanf输入带空格的字符串以及scanf输入单个字符的问题