一些输入输出的坑
一些输入输出的坑
第一个:scanf函数
scanf()函数接收输入数据时,遇下面情况结束一个数据的输入:(不是结束该scanf函数,scanf函数仅在每个数据域均有数据,并按回车后结束)。
① 遇“空格”、“回车”、“跳格”键。
② 遇宽度结束。
③ 遇非法输入。
这些就停止了输入。
所以:输入有空格,回车,跳格时,不可选!
第二个:cin函数
cin是遇到“空格”就停止读取输入,并且cin是从第一个“非空格字符”开始读取。
cin在读取字符串的时候,遇到了“空格”就相当于结束了字符串的读入。这个坑啊!!!在这里,小菜鸡附上一个关于输入输出的字符串的题,小菜鸡就是这个知识点不知道,才wa了几次。。。
题目:输入5个字符串,输出最长的那个字符串(1782)。
小菜鸡的代码是这样的:
-
#include<bits/stdc++.h>
-
using namespace std;
-
int main()
-
{
-
char s[1000],mx[1000];
-
int i;
-
cin>>s;
-
strcpy(mx,s);
-
for(i=1;i<5;i++)
-
{
-
cin>>s;
-
if(strlen(mx)<strlen(s))
-
strcpy(mx,s);
-
}
-
cout<<mx<<endl;
-
return 0;
-
}
但是wa。。。cin遇到”空格就结束了”,所以,scanf函数也不行,小菜鸡只好换gets函数和getline函数 所以。。。。。 改成这样就ac了,开心。
-
#include<bits/stdc++.h>
-
using namespace std;
-
int main()
-
{
-
char s[1000],mx[1000];
-
int i;
-
gets(s);
-
strcpy(mx,s);
-
for(i=1;i<5;i++)
-
{
-
gets(s);
-
if(strlen(mx)<strlen(s))
-
strcpy(mx,s);
-
}
-
cout<<mx<<endl;
-
return 0;
-
}
第三个:gets函数
1.gets()函数用来接收输入的字符串,而scanf()可以接收多种格式的数据。两个函数遇到回车符都会认为是输入结束,但是gets()可以接收空格,但是scanf()则不行。 2.gets()函数和scanf()函数都不能处理回车符。即把回车符看作再次输入的字符。 注意:一般gets函数较少用,会数据溢出,出现bug。谨慎使用
第四个:getline函数
1.getline()函数是C++的函数,使用该函数需要头文件iostream.h。默认情况下,该函数遇到回车停止读入,但是此时会屏蔽回车键。 2.getline是直接从第一个字符开始读取(无论是不是空格,都要读入),并且getline是遇到“回车”停止读入。 注意:getline函数实用度较高。
大家可以根据题意,来选择适合的输入函数。
本文由IT教学网整理发布,转载请注明出处:http://www.itjx.com/rumen/jisuanji/557.html