(如果没有账户而不能复制代码,请在上方地址栏前面加上“read:”打开阅读器模式)
一门编程语言肯定要有输入和输出。就好怕你需要吃饭和上厕所。
C++有许多的输入语句和输出语句,最基本的输入和输出的语句就是cin和cout。
1、语法结构——输出
下面是输入语句的结构:
cout<</*你想输出的内容*/; //cout在这里是输出语句
其中“<<”是重载运算符,把“<<”后面的内容全部打印到屏幕上,其中“cout”归属于“std”命名空间,来源于“iostream”头文件内。后面的“;”是该行程序运行结束的标识。如果想要换行,可以加上“\n”符号或者“<<endl”
而且你想输出多个内容时,可以写成一行,格式如下:
cout<</*a*/<</*b*/<<......<</*z*/<<endl;
cout<</*a*/<</*b*/<<......<</*z*/<<"\n";
输出效果:
/*a*//*b*/(这里省略/*c*/~/*y*/)/*z*/(换行)
但是要注意,不要把“<<”打成“<”,不然会引发一连串的编译错误。
举一些例子:
cout<<"Hello,"<<"world!"; //输出“Hello,world!”
cout<<"Hello,world!"; //输出“Hello,world!”
cout<<"Hello,"<<endl<<"world!"<<endl; //输出“Hello,”换行world!”,换行
cout<<"Hello"<<" "<<"world"; //输出“Hello world”
因为“cout”归属于“std”命名空间内。如果没使用全局std命名空间,需要在cout和endl前加上“std::”,也就是:
std::cout<<"cout和endl归属于std!"<<std::endl;
2、语法结构——输入
输入语句和输出语句结构相似,但是必须要先定义一个变量把输入的值存进去。
结构如下:
cin>>/*变量*/; //cin在这里是输入语句
在这里,“>>”也是重载符,把cin读取到的内容全部存储到变量中,这里注意:读取的内容要与变量的类型相同,否则会发生隐式转换或者编译错误。
“cin”也来源于“iostream”头文件,归属于“std”命名空间,同样,如果没使用全局std命名空间,要在“cin”前加“std::”。你也可以一次读取多个内容并存储到变量中。
cin>>a>>b>>c>>d>>e; //依次读取内容到a b c d e,以空白字符作为结束符(多数为空格)
末尾也要加上“;”。也不要把“>>”打成“>”!
举个例子:
int n;
cin>>n; //把数据存储到n中。
3、特殊的输入输出语句
(1)getline
因为输入输出以空白字符(包括空格)为结束符,所以如果字符串中有空格就会截掉后面的部分。但是getline就可以很好的解决问题,因为它的结束符是换行(或者回车)。
string s;
cin>>s;
cout<<s<<endl;
//输入:Hello World
//输出:Hello
string s;
getline(cin,s); //第一个参数填cin,第二个参数填变量名
cout<<s<<endl;
//输入:Hello World
//输出:Hello World
注意:因为以换行为结束符,所以不能在“cin”后使用,因为每当“cin”读取数据的时候,我们一按回车(Enter),“cin”会把这个回车留在缓冲区,直到被“getline”读取,导致“getline”还没读取到数据,就提前结束。不过,我们可以用“cin.ignore()”来清除缓冲区,这样可以避免“getline”提前终止。
int n;
cin>>n;
string s;
getline(cin,s); //直接结束,s没有存储到任何值。
int n;
cin>>n;
cin.ignore(); //清空缓冲区。
string s;
getline(cin,s); //正确读取。
(2)scanf和printf
这2个语句是C语言的格式化输出,运行速度比C++的cin和cout快,但是并没有cin和cout安全。来源于头文件“cstdio”中,归属于“std”命名空间,但是允许不引用“using namespace std;”或者“std::”。但是标准要求还是要引用的。
scanf()是输入语句,它有2个及以上的参数,第一个参数必须是格式字符串!这些字符串我放到附录里了。然后就是变量名,变量名前必须加上“&”符号,意思是取地址,因为scanf要修改变量,需要访问变量的地址,如果不写“&”符号,编译器会误认为这个变量就是地址,可能会引发未定义行为(运行时错误)。
而且scanf的格式化字符串要和变量类型一致,不然可能会出现运行时错误、输出垃圾值……(内存中的无效值)导致后面的运算全部出错。
举个例子:
int a;double b;
scanf("%d%f",&a,&b); //必须取地址,一个格式字符串用“%”开头
而printf()是输出语句,它和scanf极其相似,只不过,它可以只要1个参数。也来源于头文件“cstdio”,归属于“std”命名空间。
它的第一个参数是格式化符号或者是字符串,也可以混合使用。如果有格式化符号,后面就要有匹配的变量类型。变量类型不匹配也会运行时错误或者输出乱码。要换行时在想换行的地方加“\n”。
printf("Hello\nWorld%d%d",a,b); //假设a=3,b=5
//输出
//Hello
//World35
此时你会问:“如果想输出%该怎么办?”在这里,我们可以这么写“%%”,因为%作为格式化符号具有转义的本领,类似于“\”转义。
printf("平均分:%d%%",a); //a=85
//输出:
//平均分:85%
4、总结
我们学习的输入输出语句主要有cout、cin、scanf、printf。其中cout和cin更安全,来自C++,scanf和printf速度更快,来自C
5、习题(满分100分)
一、简答题(25分,每题5分,一共5题)
1、请简要说明cout、cin、printf、scanf的区别。
2、cout和cin归属于哪个命名空间?
3、请简要说明cout、cin的用法。
4、请简要说明printf、scanf的用法。
5、为什么用scanf读取数据时需要在变量名前面加“&”?
二、编程题(75分,每题25分,一共3题)
1、请分别用cout和printf输出“Hello, World!”,并均有换行(引号内的内容)
2、请分别用cin读取整形数据到a,用scanf读取双精度浮点数据到b,并全部用cout输出,用空格隔开。(换行可选)
3、(选做)请用getline读取整型并用printf输出。
6、参考答案(写完之后再看!)
一、1、cout和cin归属于iostream头文件,而printf和scanf归属于cstdio头文件(答案不唯一)
2、cout和cin归属于std命名空间
3、cout用于输出,使用“<<”连接多个输出内容,自动识别类型,cin用于输入,使用“>>”连接多个输入内容,自动类型转换(答案不唯一)
4、printf用于格式化输出,需要格式符指定数据类型,scanf用于格式化输入,需要格式符匹配数据类型,变量前面加“&”取地址(答案不唯一)
5、因为需要取变量地址
二、1、
#include<iostream>
#include<cstdio> //C语言IO库
using namespace std;
int main(){
cout<<"Hello,World!"<<endl;
printf("Hello,World!\n");
return 0;
}
2、
#include<iostream>
#include<cstdio> //C语言IO库
using namespace std;
int main(){
int a;
double b;
cin>>a;
scanf("%f",&b);
cout<<a<<" "<<b;
return 0;
}
3、
#include<iostream>
#include<string> //字符串库
#include<cstdio> //C语言IO库
using namespace std;
int main(){
string a;
getline(cin,a);
int num=stoi(a); //字符串转整形
printf("%d",num);
return 0;
}
7、附录
| 格式符 | 数据类型 | 示例 | 说明 |
|---|---|---|---|
| %d | int | printf("%d",100); | 十进制整数 |
| %f | float | printf("%f",3.14); | 浮点数(默认6位) |
| %lf | double | scanf("%lf",&d); | 双精度浮点数 |
| %c | char | printf("%c",'A'); | 单个字符 |
| %s | char数组/string | printf("%s","hi"); | 字符串 |
| %p | 指针 | printf("%p",&x); | 指针地址 |
8、后记
希望本篇文章对小白有帮助,如果有错误,欢迎大佬来纠错!
如果作者写得好,收藏一下吧,未免以后用得着呢?
4万+

被折叠的 条评论
为什么被折叠?



