C++和C语言中常用输入输出语句的使用

C语言中常用输入输出语句的使用

C风格中的getchar字符输入&putchar字符输出函数

问题一:

getchar顾名思义就是字符输入函数,单次执行只能读入一个字符。这难道说他对于字符串输入无能为力吗?

其实不是的,字符串其实是字符组成的数组,我们每一次输入一个字符输入多次不就完事了。

问题二:

但是问题又来了,你循环读取的话,你得有个终止循环的条件呀?不能是死循环吧,

那当然不是了,我们知道当我们在输入界面点击“回车”时,回车其实就是一个转义字符也其本质就是字符。因此,我们只要判断这个字符什么时候出现就可以判断循环读取操作什么时候结束了。

程序如下:

#include <iostream>  
#include <stdio.h>  
#include "语句的输入与输出.h"  
  
int main()  
{  
    char a = 0;  
    while ((a = getchar()) != '\n') // 循环将数据录入缓存区  
    putchar(a);  
} 

 

这里有一个问题:上述语句中是不是”当字符输入a中,就直接用putchar(a)直接输出吗?”

其实不是的,字符串的循环读入需要经历一下几个步骤:

 

因此,我们可以总结:getchar函数将输入字符串中的每个字符循环写入缓冲区内;putchar函数将缓冲区内的每个字符写入输出界面上。

C风格中的printf格式化输出函数&scanf格式化输入函数

首先我们看他们是谁的缩写:

Printf的缩写全称意思print format 格化打印;scanf scan format 格式化扫描(就是输入数据) sprintf string print format 字符串格式化打印。

scanf 和 printf 跟 C++ 中的 cin 和 cout 功能很类似,但是没有 cin 和 cout 智能。

例如用scanf于printf执行数据的输入输出:

# include <stdio.h>  
  
int main(void)  
{  
    int i;  
    scanf("%d", &i);  //&i 表示变量 i 的地址,&是取地址符  
    printf("i = %d\n", i); // 切记用""英文输入法下的双引号  
    return 0;  
} 

 

新版C++中不建议用这两个函数来输入输出。

Scanf函数读入数据的流程:

 

要想将程序中的 scanf 行弄明白,首先要清楚的是:我们从键盘输入的全部都是字符。比如从键盘输入 123,它表示的并不是数字 123,而是字符 '1'、字符 '2' 和字符 '3'。这是为什么呢?

操作系统内核就是这样运作的。操作系统在接收键盘数据时都将它当成字符来接收的。这时就需要用“输入控制符”将它转化一下。%d的含义就是要将从键盘输入的这些合法的字符转化成一个十进制数字。经过 %d 转化完之后,字符 123 就是数字 123 了。

第二个要弄清楚的是:&是一个取地址运算符,&后面加变量名表示“该变量的地址”,所以&i就表示变量 i 的地址。&i又称为“取地址i”,就相当于将数据存入以变量 i 的地址为地址的变量中。

那么以变量 i 的地址为地址的变量是哪个变量呢?就是变量 i。所以程序中 scanf 的结果就把值 123 放到变量i中。

综上所述,scanf 语句的意思就是:从键盘上输入字符 123,然后%d将这三个字符转化成十进制数 123,最后通过“取地址 i”找到变量 i 的地址,再将数字 123 放到以变量 i 的地址为地址的变量中,即变量 i 中,所以最终的输出结果就是i=123。

注意,为什么不直接说“放到变量i中”?而是说“放到以变量 i 的地址为地址的变量中”?因为这么说虽然很绕口,但是能加强对 &i 的理解,这么说更能表达 &i 的本质和内涵。很多人在学习 scanf 的时候,经常将“变量 i”和“变量 i 的地址”混淆,从而思维开始混乱,等深刻了解 &i 的含义之后就可以不那么说了。

以上是 scanf 的最简单用法,也是最常用、最基本、最重要的用法。这样通过 scanf 就可以在程序运行的过程中由用户来指定变量 i 的值,这与在程序中赋值相比较功能更强大。

C++风格的输入输出流

C++中cin输入流的详细介绍:https://www.cctry.com/thread-279040-1-1.html(建议学完从在之后再看)

C++中标准输入输出流控制符:https://www.cctry.com/thread-279037-1-1.html

标准输入输出流控制符:

 

举以下例子说明:

Cin>>ws的使用:

# include <iostream>  
#include <istream>  
using namespace std;  
  
int main(void)  
{  
    int a = 0;  
    cin >> ws; // ws是whitespace空格的英文缩写,表明输入流文件中忽略输入数据前面的所有空格  
    cin >> a; // 输入“   123”  
    cout << a << endl; // 输出“123”,即忽略了数据前面所有的空格  
} 

Cin>>skipws的使用:

# include <iostream>  
#include <istream>  
using namespace std;  
  
int main(void)  
{  
    int a = 0;  
    cin >> skipws; // skipws是skip whitespace空格的英文缩写,表明输入流文件中忽略输入数据前面的所有空格  
    cin >> a; // 输入“   123”  
    cout << a << endl; // 输出“123”,即忽略了数据前面所有的空格  
} 

 

Cin>>noskipws的使用:

noskipws => no skip whitespace(空白

noskipws 不是不忽略输入前的空格, 而是不忽略 任意地方的空格

操作符noskipws会令输入运算符读取空白符,而不是跳过它们。为了恢复默认行为,可以使用skipws操作符。

cin >> std::noskipws >> c0;  

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肥肥胖胖是太阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值