C语言基本输入输出


前言

本文主要介绍C语言如何实现把数据进行输入输出并列举一下常见的小错误。


提示:以下是本篇文章正文内容,下面案例可供参考

一、数据类型

众所周知,计算机中的数据是存放在存储单元中的,数据是由010101…组成。与我们现实中学的数学相对应,数可以分为实数,虚数,然后继续分类…。那么计算机子中的数据也可以进行分类,我们依据数据的存储形式以及存储单元的长度对数据进行划分,划分的结果(依据C99标准)可以参考下图。

在这里插入图片描述

对于数据类型以下说明:

  • 整形变量是以补码的形式存贮到内存当中;
  • 不同的数据类型在内存中的占据空间是不同的,对Visual C++而言,char型占据1个字节,int型占据4个字节;
  • 上图中标黄色的是字符型(char),这里强调一下:字符型是借助ASCII码存贮到我们的计算机内存当中,而与字符相对应地ASCII码是整数,例如‘a’字符对应的是整数97,空格字符对应的是整数32,也就是字符和整数本质是一样的所以将字符型划到整型中

二、基本输出

1.printf函数的基本用法

printf的用法
printf(“字符串”)
printf(输出控制符,输出参数)
printf(多个输出控制符,多个输出参数)
printf(输出控制符和非输出控制符,输出参数)

2.printf函数的格式化输出

A. d 格式符

d格式符用于格式化输出十进制(decmial)字符,使用方法是%nd,n代表字符占据的长度
如果n>0,则使得输出字符向右对齐,字符长度小于n的值,则用空格补齐;如果n<0,则反之;

代码如下(示例):

#include <stdio.h>
int main(void){
    int i;
    i = 12345;
    printf("%10d\n",i);
    return 0;
}
//输出结果如下
     12345

B. c 格式符

c(char)的控制符和d用法相同,这里我们用‘a’和97用于字符的输出,得到的一样的结果(‘a’的ASCII码是97),这就证实了字符和整数的本质是一样的,以相同的二进制代码存贮到内存当中;

#include <stdio.h>
int main(void){
    char ch = 'a';
    int i = 97;
    printf("%5c\n",ch);
    printf("%5c\n",i);
    return 0;
}
//输出结果如下
    a
    a

C. f 格式符

f控制符也具有上面控制符的属性,不同的是%m.nf,其中m的代表是输出的数据的宽度(和上面类似正的是右对齐,负的是左对齐),而n则是要保留的小数的位数;

#include <stdio.h>
int main(void){
    float i;
    i = 1/3.0;
    printf("%5.2f\n",i);
    return 0;
}
//输出结果如下
 0.33

D. e 格式符

e控制符用于将数字转化为科学计数形式%m.ne,其中m仍是输出结果的长度,n是保留的小数的位数;

#include <stdio.h>
int main(void){
    float i;
    i = 1000/3.0;
    printf("%10.2e\n",i);
    return 0;
}
//输出结果如下
  3.33e+02

3.putchar函数的基本用法

putchar函数用于输出单个字符,我们可以向它传递字符型变量或整型变量,例如‘a’和97,二者输出结果相同;

#include <stdio.h>
int main(void){
    char ch = 'a';
    putchar(ch);
    putchar(97);
    return 0;
}
//输出结果如下
aa

三、基本输入

1.scanf函数的基本用法

scanf函数是C语言中的输入函数,一般形式为sacnf(‘输入控制符’,输入参数),这里的输入参数是以一个变量地址为变量,例如&i;关于scanf函数有以下几点说明:

  • scanf函数中采用输入控制符,原因是因为我们通过键盘输入到计算机中的数据类型全部为字符(char型),例如输入:987,我们直观上认为是九百八十七数字,实际上计算器理解的是‘9’,‘8’,‘7’三个字符,所以为了实现我们最初的目的将九百八十七输入到计算机中,所以要将字符格式转化,使用‘%d’化为十进制(decimal);
  • 关于scanf函数的输入参数,输入参数是组成是‘取地址运算符+要取地址的变量’即‘&i’,相当于将获取的数据存入以变量 i 地址为地址的变量中,也就是将获得数值赋值给变量i;
  • 关于scanf函数的读取问题,scanf函数若采用%d作为输入控制符,则读取所有的数字直到出现字符不是数字为止:scanf函数若采用%c作为输入控制符,则只读取第一个字符char;

A. scanf含有非输入控制符

scanf含有非输入控制符时,必须把非输入控制符进行输入;

代码如下(示例)

#include <stdio.h>
int main(void){
    int i,j,k;
    
    scanf("i = %d j = %d k = %d",&i,&j,&k);
    printf("%d,%d,%d\n",i,j,k);
    
    return 0;
}
//输出结果如下
i = 1 j = 2 k = 3
1,2,3

B. 多个scanf同时使用

示例一:

#include <stdio.h>
int main(void){
    int i,j;
    char c1,c2;
    
    scanf("%d %d",&i,&j);
    scanf("%c %c",&c1,&c2);
    printf("i = %d,j = %d,c1 = %c,c2 = %c\n",i,j,c1,c2);
    return 0;
}
//输出结果如下
1 2 a b
i = 1,j = 2,c1 =  ,c2 = a

为什么c1和c2不按照我们预想的输出?这是因为我们从键盘中的输入都是字符,空格回车都是字符,所以第二个scanf先获取了空格字符然后再获取了a字符。

示例二:

# include<stdio.h>
int main(void){
    int i,j;

    scanf("%d",&i);
    printf("i = %d\n",i);
    
    scanf("%d",&j);
    printf("j = %d\n",j);
    return 0;
}
//输出结果如下
123m
i = 123
j = 32766

上面的代码也是用了两个scanf函数,我们想要获得用户的输入,但是如果我们输入的不只是数字还有字符,这样程序的输出结果也会出错。例如上面输入的123m,第一个scanf获得123并通过第一个printf正确输出,但是第二个scanf获得了123后面的字符m,由于第二个字符的格式控制符是‘%d’,所以无法进行正确的格式转化所以输出异常的结果,那么如何修改上面的程序?请参考下面的程序。

# include<stdio.h>
int main(void){
    int i,j;
    char ch;

    scanf("%d",&i);
    printf("i = %d\n",i);
    //借助while循环实现防出错
    while ((ch = getchar()) != '\n')
        continue;
    
    scanf("%d",&j);
    printf("j = %d\n",j);
    return 0;
}


总结

关于字符的格式化输出,可以和我的另一篇文章python内置函数之format()进行类比,举一反三。

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值