C/C++输入读取数据函数总结
来源:互联网 发布:哪有培训seo 编辑:程序博客网 时间:2024/05/01 04:28
2、scanf/gets函数读取字符串#include <stdio.h>
char ch1, ch2;
scanf("%c", &ch1);
ch2 = getchar();
#include <stdio.h>
char str1[20];
scanf("%s",str1);
printf("%s/n",str1);
#include <stdio.h>
char str1[20];
gets(str1);
printf("%s/n",str1); 第一:要注意不同的函数是否接受空格符、是否舍弃最后的回车符的问题!
scanf()以Space、Enter、Tab结束一次输入,不会舍弃最后的回车符(即回车符会残留在缓冲区中);
getchar()以Enter结束输入,也不会舍弃最后的回车符;
读取字符串时:
scanf()以Space、Enter、Tab结束一次输入,会舍弃最后的回车符!
gets()以Enter结束输入(空格不结束),接受空格,会舍弃最后的回车符!
第二:为了避免出现上述问题,必须要清空缓冲区的残留数据,可以用以下的方法解决:
方法1:C语言里提供了函数清空缓冲区,只要在读数据之前先清空缓冲区就没问题了!
这个函数是fflush(stdin)。
方法2:自己取出缓冲区里的残留数据。
(说实话这个语句我也没看懂,呵呵!为什么格式控制是这样的!希望高手指点一下!)
scanf("%[^/n]",string);
C++
3.1 cin函数
与前一节中提到的scanf函数一样,程序的输入都建有一个缓冲区,即输入缓冲区。一次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输入缓冲区中取数据。正因为cin函数是直接从缓冲区取数据的,所以有时候当缓冲区中有残留数据时,cin函数会直接取得这些残留数据而不会请求键盘输入,这就是例子中为什么会出现输入语句失效的原因!
输入结束条件 :遇到Enter、Space、Tab键。(这个很重要!)
对结束符的处理 :丢弃缓冲区中使得输入结束的结束符(Enter、Space、Tab)
#include <iostream>
using namespace std;
读取数字:
读取字符:int a,b;
cin>>a>>b;
cout<<a+b<<endl;
cin>>c1;char c1, c2;
cin>>c2;
cout<<c1<<" "<<c2<<endl;
读取字符串:
char a[20];
cin>>a;
cout<<a<<endl;
3.2.cin.get()函数
该函数有三种格式:无参,一参数,二参数
即cin.get(), cin.get(char ch), cin.get(array_name, Arsize)
读取字符:cin.get() 与 cin.get(char ch)用于读取字符,他们的使用是相似的
输入结束条件:Enter键
对结束符处理:不丢弃Enter,Space字符
#include <iostream>
using namespace std;
读取字符串:cin.get(array_name, Arsize)是用来读取字符串char ch;
ch=cin.get(); //或者cin.get(ch);
cout<<ch<<endl;
#include <iostream>
using namespace std;
char a[20];
cin.get(a, 10);//字符串实际长度+1=10
cout<<a<<endl;
3.2.cin.getline()函数
读取字符串:cin.getline(array_name, Arsize)是用来读取字符串(读取方式与cin.get()函数相同)
二者不同:
cin.get(array_name, Arsize)当输入的字符串超长时,不会引起cin函数的错误,后面的cin操作会继续执行,只是直接从缓冲区中取数据。但是cin.getline()当输入超长时,会引起cin函数的错误,后面的cin操作将不再执行。
#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;
与cin.get(array_name, Arsize)的例程比较会发现,这里的ch并没有读取缓冲区中的5,而是返回了-52,这里其实cin>>ch语句没有执行,是因为cin出错了}
测试输入:12345[Enter]
输出:
1234
-52
当用在多维数组中的时候,也可以用cin.getline(m[i],20)之类的用法:
#include<iostream>
#include<string>
using namespace std;
main ()
{
char m[3][20];
for(int i=0;i<3;i++)
{
cout<<"\n请输入第"<<i+1<<"个字符串:"<<endl;
cin.getline(m[i],20);
}
cout<<endl;
for(int j=0;j<3;j++)
cout<<"输出m["<<j<<"]的值:"<<m[j]<<endl;
4、getline() // 接受一个字符串,可以接收空格并输出,需包含“#include<string>”}
请输入第1个字符串:
kskr1
请输入第2个字符串:
kskr2
请输入第3个字符串:
kskr3
输出m[0]的值:kskr1
输出m[1]的值:kskr2
输出m[2]的值:kskr3
#include<iostream>
#include<string>
using namespace std;
main ()
{
string str;getline(cin,str);cout<<str<<endl;
}
输入:jkljkljkl
输出:jkljkljkl
输入:jkl jfksldfj jklsjfl
输出:jkl jfksldfj jklsjfl
和cin.getline()类似,但是cin.getline()属于istream流,而getline()属于string流,是不一样的两个函数
5、gets() // 接受一个字符串,可以接收空格并输出,在C++程序中需包含“#include<string>”
#include<iostream>
#include<string>
using namespace std;
main ()
{
char m[20];gets(m); //不能写成m=gets();cout<<m<<endl;
}类似cin.getline()里面的一个例子,gets()同样可以用在多维数组里面。
输入:jkljkljkl
输出:jkljkljkl
输入:jkl jkl jkl
输出:jkl jkl jkl
- C/C++输入读取数据函数总结
- c/c++输入函数总结
- C++:读取数量不定的输入数据
- C语言基础-间隔读取输入数据
- C语言 数据输入/输出函数
- C语言:从文本文件中读取输入数据
- C和C++中读取不定数量的输入数据
- C语言读取文件中的数据作为输入和输出
- 【c/c++】输入函数详解
- C#:读取数据DataReader
- c/c++输入函数
- C 自定义输入函数
- C 读取配置文件函数
- C语言实现数据输入与输出的函数
- C语言fscanf函数读取结构化数据
- C总结:删掉输入字符串
- C&C++输入方法总结
- c++:把数据输入文件
- Hdu 1789
- R语言学习笔记(一)——数据结构与基本运算
- android R.java文件介绍
- 关于iOS审核加急的 账号问题说明
- automake
- C/C++输入读取数据函数总结
- hit oj 2255
- SQL Server 常用高级语法笔记.别再写几百行的语句了。ok?
- Android 屏幕适配方案
- 顶尖投资人给新手投资人的忠告
- linux学习笔记-----其他文件权限管理命令
- hdu3306
- java socket编程
- Codeforces 5E