while循环输入字符串中以Esc键作为循环结束标识——scanf读取带空格字符串

原创 2016年08月30日 22:50:39

需求

在一个字符串输入循环中,判断输入的是字符串还是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

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

getchar()和getch()区别

很多时候我们都需要从用户的键盘上获取一些字符,比如搞一些小游戏,搞一个用户选择啦。 例如 switch(a=getchar()) { case: ............. break; ...

atoi函数与scanf中%*c及%[^\n]的简单讲解

本次讲解将结合:NYOJ-96-n-1位数 进行讲解。题目链接: http://acm.nyist.net/JudgeOnline/problem.php?pid=96题目大意: 输出一个数的...

编写程序,循环接收用户从键盘输入多个字符串,直到输入“end”时循环结束,并将所有已输入的字符串按字典顺序倒序打印。

编写程序,循环接收用户从键盘输入多个字符串,直到输入“end”时循环结束,并将所有已输入的字符串按字典顺序倒序打印。package yang.base; import java.util.Array...

输入字符串时输入空格

1.最容易的,将一个字符串分为一个一个字符输入      char s[100];      int i=0;      while(scanf(...

读取带空格字符串时候可以用while((c=getchar())!='\n') 2800:垂直直方图

2800:垂直直方图 View Submit Statistics Clarify Time Limit: 1000ms Memory Limit: 65536kB De...

Linux学习笔记——例说makefile 多个文件

0.前言     从学习C语言开始就慢慢开始接触makefile,查阅了很多的makefile的资料但总感觉没有真正掌握makefile,如果自己动手写一个makefile总觉得非常吃力。所以特意借...

算法竞赛入门经典3-3 乘积的末三位

isdigit只能一个一个的转换字符格式,sscanf也不能转化位置个数的字符,所以输入时就还是一个一个的输入, #include #include #include #include #pragm...
  • lszdh
  • lszdh
  • 2014年03月04日 20:01
  • 647

使用scanf_s输入得到一行带空格的字符串

测试环境:VS2012 Update4 测试语言:C++ 测试代码: #include int main(int argc,char* argv[]) { char str[20]; ...

strlen()不能算出scanf输入字符串的空格问题

#include main() { char a[50]; scanf("%s",a); printf("%d",strlen(a)); } 输入"123 abc" 结果是3。 原因和解决办法 :...

labview——while循环

  • 2009年09月30日 14:17
  • 7KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:while循环输入字符串中以Esc键作为循环结束标识——scanf读取带空格字符串
举报原因:
原因补充:

(最多只允许输入30个字)