输入的几种实现

字符串的输入
cin
输入多个字符串时,以空格分隔;输入单个字符串时其中不能有空格。
例如:
  程序中有下列语句:

    static char str1[5],str2[5],str3[5];
    cin>>str1>>str2>>str3;


  运行时输入数据:
    How are you?


若改为:

    static char str[13];
    cin>>str;


  运行时输入数据:
    How are you?
则str数组中只会存储“How”,其他的都无法保存。


而且,cin并不读取最终的回车换行符,所以,我们可以通过getchar()获取,举例如下:

 char str[100];
 cin>>str;
 cout<<int(getchar())<<endl;//不读取也不存储结束符,故getchar不需要输入字符就可以输出结果
 cout<<str<<endl;


/* output */
yang [输入、回车]
10  [输出]
yang [输出]
Press any key to continue

cin.getline(字符数组名St, 字符个数N, 结束符);
功能:一次连续读入多个字符(可以包括空格),直到读满N个,或遇到指定的结束符(缺省为'\n')。读入的字符串存放于字符数组St中。读取但不存储结束符。
注:1、可以读取空格,相对于cin
2、读取N个字符,但是如果我们直接输入字符串的话,则是只可以输入N-1个字符,因为字符串最后有'\0'。
3、结束符有缺省值,故我们可以只传递两个参数,也可以指定结束符,当输入指定的结束符的时候,输入结束。例如,我们可以指定输入结束符是'*'的话,我们可以这样:
cin.getline(str,20,'*');
这样当我们输入'*'的时候,输入结束。
4、读取但不存储结束符的意思是,如果我们输入的字符个数<N的时候,当我们输入的结束符是回车'\n'的时候,会从内存中读取回车换行符,所以,我们如果使用getchar()试图获取'\n'是无法获取的,也就是说,我们需要输入一个字符才行。举例如下:

 char str[100];
 cin.getline(str,20,'\n');
 cout<<getchar()<<endl;//读取但不存储结束符,故此时需要输入一个字符
 cout<<str<<endl;


/* output */
yang ming [输入、回车]
a  [输入、回车]
97  [输出]
yang ming [输出]
Press any key to continue

cin.get(字符数组名St, 字符个数N, 结束符);
功能:一次连续读入多个字符(可以包括空格),直到读满N个,或遇到指定的结束符(缺省为'\n')。读入的字符串存放于字符数组St中。既不读取也不存储结束符。
1、其他的一样,除了“既不读取也不存储结束符”,我们可以尝试上面的例子:

 char str[100];
 cin.get(str,20,'\n');
 cout<<getchar()<<endl;//不读取也不存储结束符,故此时可以读取输入字符串最后的回车,故值为10(回车换行的ASCII值)
 cout<<str<<endl;


/* output */
yang ming [输入、回车]
10  [输出]
yang ming [输出]
Press any key to continue
当我们运行的时候,输入完字符串并按回车之后,好像并没有输入其他字符,就输出了一个数字10,这个数字10就是回车换行的ASCII值。所以说“既不读取也不存储结束符”的意思就是,并没有把结尾符'\n'读入内存,所以,我们使用getchar()的时候,获取的就是现在在内存中的'\n'。

gets()
gets()函数用来从标准输入设备(键盘)读取字符串直到换行符结束,但换行符会被丢弃,然后在末尾添加'\0'字符。其调用原型是:
char*gets(char*buffer);

char str[50];  
gets(str);


我们可以通过下面的程序查看gets读取了换行符,如下:

 gets(str);
 cout<<int(getchar())<<endl;
 cout<<str<<endl;


运行的结果是我们需要输入一个字符,才可以作为getchar的返回值。
/* output */
yang ming [输入、回车]
a  [输入、回车]
97  [输出]
yang ming [输出]
Press any key to continue

scanf
scanf()函数以空格、回车、Tab键作为输入的结束。如果输入的字符串中间有空格的话,空格之后的字符串无法读取。
scanf也是不读取输入结束符'\n',通过下面程序验证:

 char str[100];
 scanf("%s",str);
 cout<<int(getchar())<<endl;
 cout<<str<<endl;


/* output */
yang [输入、回车]
10  [输出]
yang [输出]
Press any key to continue

getchar()
获取单个字符,不读取回车符,通过下面的例子证明:

 char c;
 c=getchar();
 cout<<int(getchar())<<endl;
 cout<<c<<endl;


/* output */
a [输入、回车]
10 [输出]
a [输出]
Press any key to continue

综上所述,几个输入符中,
可以读取空格的有:cin.getline()   cin.get()    gets()
不可以读取空格的有:cin   scanf
不读取不存储:cin   cin.get()   scanf() getchar()
读取不存储:cin.getline()   gets()

参考:http://baike.baidu.com/view/751665.htm
参考:http://wenku.baidu.com/view/6387198402d276a200292ebc.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值