learn_cin/scanf/gets...
Updated:
Contents
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().
|
|
测试: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操作 将不再执行.
|
|
测试输入:12345 [输入]
输出:
1234
-52cin.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