Contents
  1. 1. scanf()/gets()
  2. 2. cin

scanf()/gets()

  • scanf(“%d,%d”,&a,&b);

    • 如果a和b被成功的读入,则scanf的返回值就是2
    • 如果只有a被成功的读入,则返回值为1
    • 如果均未成功的读入,返回值为0
    • 如果遇到错误或者EOF,返回值为EOF
    • 注:scanf(“%d,%d,%d”,&a,&b,&c);中%d,%d,%d之间有逗号,在输入数据时也要加逗号,如果去掉逗号,输入时就不用逗号,而用空格,tab键或回车键将各个数据隔开。
    • scanf()以Space,Enter,Tab结束一次的输入,不会舍弃最后的回车符(留在最后的缓冲区中)。
  • gets()

    • 用scanf来读取一个字符串时,字符串中是不可以出现空格的,一旦出现空格,后面的数据就会舍弃残留在缓冲区中。其实有另外一个函数是可以接受空格的,那就是gets().
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
int main()
{
char str1[20], str2[20];
gets(str1);
printf("%s\n",str1);
gets(str2);
printf("%s\n",str2);
getchar();
return 0;
}
  • 测试:Hello World! [输入]
    Hello World! [输出]
    12345 [输入]
    12345 [输出]

  • scanf()以Space、Enter、Tab结束一次输入,不会舍弃最后的回车符(即回车符会残留在缓冲区中)
    getchar()读取字符时,以Enter结束输入,也不会舍弃最后的回车符。
    gets()以Enter结束输入(空格不结束),接受空格,会舍弃最后的回车符!

cin

  • cin()

    • 与前一节中提到的scanf函数一样,程序的输入都建有一个缓冲区,即输入缓冲区。一次输入过程是这样的,当一次 键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输入缓冲区中取数据。正因为cin函数是直接从 缓冲区取数据的,所以有时候当缓冲区中有残留数据时,cin函数会直接取得这些残留数据而不会请求键盘输入,这 就是例子中为什么会出现输入语句失效的原因!
    • cin 输入结束条件:遇到Enter,Space,Tab键对结束符的处理:丢弃缓冲区中使得输入结束的结束符(Enter、Space、Tab)
  • cin.get()

    • 输入结束条件是:Enter键,不会丢弃缓冲区的Enter,space键
    • cin.get() 与 cin.get(char ch)用于读取字符,他们的使用是相似的。即:ch=cin.get() 与 cin.get(ch)是等价的.
  • cin.getline()

    • 输入结束的条件:Enter键,丢弃缓冲区的enter
    • cin.get(array_name, Arsize)当输入的字符串超长时,不会引起cin函数的错误,后面的cin操作会继续执行 ,只是直接从缓冲区中取数据。但是cin.getline()当输入超长时,会引起cin函数的错误,后面的cin操作 将不再执行.
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
using namespace std;
int main ()
{
char ch, a[20];
cin.getline(a, 5);
cin>>ch;
cout<<a<<endl;
cout<<(int)ch<<endl;
return 0;
}
  • 测试输入:12345 [输入]
    输出:
    1234
    -52

  • cin.get(array_name, Arsize)的例程比较会发现,这里的ch并没有读取缓冲区中的5,而是返回了-52 ,这里其实cin>>ch语句没有执行,是因为cin出错了

  • 引申:cin.getline()实际上有三个参数,cin.getline(接受字符串的看哦那间m,接受个数5,结束字符)当第三个参数 省略时,系统默认为’\0’如果将例子中cin.getline()改为cin.getline(m,5,’a’);当输入jlkjkljkl时输出jklj ,输入jkaljkljkl时,输出jk
  • getline()

    • getline (istream& is, string & str, char delim)
      getline (istream& is,string& str)
      其中delim为终结符,地中形式delim默认为’\n’(换行符)

    • 可以接受一个字符串,可以接收空格并输出


    100days—第六天—006

Contents
  1. 1. scanf()/gets()
  2. 2. cin