1. 编程学习网 > 编程入门 > 计算机知识 > 一些输入输出的坑

一些输入输出的坑

一些输入输出的坑

第一个:scanf函数

scanf()函数接收输入数据时,遇下面情况结束一个数据的输入:(不是结束该scanf函数,scanf函数仅在每个数据域均有数据,并按回车后结束)。
① 遇“空格”、“回车”、“跳格”键。
② 遇宽度结束。
③ 遇非法输入。
这些就停止了输入。
所以:输入有空格,回车,跳格时,不可选!


第二个:cin函数

cin是遇到“空格”就停止读取输入,并且cin是从第一个“非空格字符”开始读取。
cin在读取字符串的时候,遇到了“空格”就相当于结束了字符串的读入。这个坑啊!!!在这里,小菜鸡附上一个关于输入输出的字符串的题,小菜鸡就是这个知识点不知道,才wa了几次。。。
题目:输入5个字符串,输出最长的那个字符串(1782)。
小菜鸡的代码是这样的:


  1.  
  2. #include<bits/stdc++.h>
  3. using namespace std;
  4. int main()
  5. {
  6. char s[1000],mx[1000];
  7. int i;
  8. cin>>s;
  9. strcpy(mx,s);
  10. for(i=1;i<5;i++)
  11. {
  12. cin>>s;
  13. if(strlen(mx)<strlen(s))
  14. strcpy(mx,s);
  15. }
  16. cout<<mx<<endl;
  17. return 0;
  18. }

但是wa。。。cin遇到”空格就结束了”,所以,scanf函数也不行,小菜鸡只好换gets函数和getline函数 所以。。。。。 改成这样就ac了,开心。


  1.  
  2. #include<bits/stdc++.h>
  3. using namespace std;
  4. int main()
  5. {
  6. char s[1000],mx[1000];
  7. int i;
  8. gets(s);
  9. strcpy(mx,s);
  10. for(i=1;i<5;i++)
  11. {
  12. gets(s);
  13. if(strlen(mx)<strlen(s))
  14. strcpy(mx,s);
  15. }
  16. cout<<mx<<endl;
  17. return 0;
  18. }

第三个: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

联系我们

在线咨询:点击这里给我发消息

咨询电话:400-998-2681

工作时间:7*24小时无休