C语言学习日记6:输入输出

一、前言

        前面我们学习了运算符的相关知识,今天我们来学习C语言的各个输入输出函数。

二、输出函数

1、字符输出函数putchar

        putchar 是 C 语言标准库中的一个字符输出函数,用来向标准输出(通常是显示器)写一个字符。其格式为putchar(c),参数:c为字符常量,变量或者表达式。

        下面用代码进行举例:

#include <stdio.h>
int main()
{
    int c;
    char a;
    c=65;a='B';
    putchar(c);putchar('\n');putchar(a);
    return 0;
}

        编译并运行,结果如下:

        其中为c赋值65,在ASCII表中对应的字符为A,通过putchar进行转换,'\n'表示回车的意思,‘B’直接通过putchar进行输出。

2、格式输出函数printf上

         printf 是 C 语言中最常用的格式化输出函数,用来把数据按照指定的格式打印到标准输出(通常是显示器)。其格式为printf(”格式控制符“,输出表)。

        下面用代码进行举例:

#include <stdio.h>
int main()
{
    int a = 123;
    printf("%d %x %o\n", a, a, a);
    char b = 'A';
    printf("%c\n", b);
    float c = 3.14;
    printf("%f %e %g\n", c, c, c);
    char arr[] = "hello world";
    printf("%s\n", arr);
    return 0;
}

        编译并运行,结果如下:

        比较简单,这里不过多赘述。

3、格式输出函数printf下

        printf输出函数还有一些附加格式说明符,如下图所示:

        下面用代码进行举例,方便理解:

#include <stdio.h>
int main()
{
    //例1
    int a = 1234;
    float f = 123.456;
    char ch = 'a';
    printf("%8d,%2d \n", a, a);
    printf("%f,%8f,%8.1f,%.2f\n", f, f, f, f);
    printf("%3c \n", ch);
    return 0;
}

         编译并运行,结果如下:

        可以看到,当有效位数不足时,会在前面补空格,有效位数足够时,则按实际输出;当使用.n格式符时,小数后位数为n,并进行四舍五入。

#include <stdio.h>
int main()
{
    //例2
    static char a[]= "hello,world!";
    printf("%s\n %15s\n %10.5s\n %2.5s\n %.3s\n",a,a,a,a,a);
    return 0;
}

         编译并运行,结果如下:

        "hello,world!"一共有12个字符,所以经过%15s输出后前面要加3个空格;%10.5s是一共要输出10位,但是后面的.5是实际输出的位数,所以只输出“hello”,前面再加5个空格;%2.5s是一共要输出2位,但是后面的.5是实际输出的位数,所以只输出“hello”,前面不用加空格;%.3s是输出实际位数3位,所以输出“hel”。

#include <stdio.h>
int main()
{
    //例3
    int a = 1234;
    float f = 123.456;
    printf("%08d \n",a);
    printf("%010.2f \n",f);
    printf("%0+8d\n",a);
    printf("%0+10.2f",f);
    return 0;
}

        编译并运行,结果如下:

        其他说明符有大家可以自己编辑一下,这里不再赘述。

4、字符串输出函数puts

       puts 是 C 语言的字符串输出函数,用于将一个以\0结尾的字符串输出到标准输出,并在结尾自动换行。下面用代码进行举例:

#include <stdio.h>
int main()
{
    char arr[6]={"hello"};
    puts(arr);//输出完立马换行
    puts(arr);
    return 0;
}

         编译并运行,结果如下:

三、输入函数

1、字符输入函数

        getchar() 是 C 语言的标准输入函数,用于从键盘一次读取一个字符,并以 int 类型返回。下面通过代码举例:

#include <stdio.h>
int main()
{
    char ch;
    ch = getchar();
    putchar(ch);
    return 0;
}

        编译并运行,随便输入一个字符,结果如下:

2、格式输入函数scanf

        scanf 是 C 语言的标准输入函数,用于按照指定的格式控制符从键盘读取数据并存入相应的变量中。其格式为:scanf(“格式控制串”,地址表);功能:按指定格式从键盘读入数据,存入地址表指定存储单元中,并按回车键结束;地址表为变量的地址,常用取地址运算符&。

        注:在Visual Studio 2022版本中,一开始scanf函数是无法使用的,因为scanf函数被认为是不安全的,编译器会报错。可以通过引入下面这个字符串“_CRT_SECURE_NO_WARNINGS”来屏蔽不安全函数错误,具体步骤如下:

1、解决方案下的工程点右键进入属性

2、点击C/C++的预处理器

3、点击预处理器定义,点击编辑

4、将字符串“_CRT_SECURE_NO_WARNINGS”加入到预处理器定义

        这样操作下来就可以使用scanf()函数了。

        目前,scanf支持的格式字符很多,比如:

        下面使用代码进行举例:

#include <stdio.h>
int main()
{
    int a;
    scanf("%d",&a);
    printf("%d\n",a);
    return 0;
}

        编译并运行,随机输入一个数,结果如下:

        scanf函数支持的说明符可以带以下修饰符:

        下面使用代码进行举例:

#include <stdio.h>
int main()
{
    //例1
    int a,b,c;
    scanf("%4d%2d%2d", &a, &b, &c);
    printf("%d-%d-%d\n", a, b, c);
    return 0;
}

        编译并运行,输入20250819,结果如下:

        可见20250819被拆分成指定的数据宽度。

#include <stdio.h>
int main()
{
    //例2
    int a,b,c;
    scanf("%2d %*3d%2d",&a,&b);
    printf("%d %d\n", a, b);
    return 0;
}

        编译并运行,输入1234567,结果如下:

        可见中间的三位被抑制掉了,没有赋给变量。

        用"%c"格式符时,空格和转义字符作为有效字符输入

#include <stdio.h>
int main()
{
    //例3
    char c1,c2,c3;
    scanf("%c%c%c", &c1, &c2, &c3);
    printf("%c %c %c\n", c1, c2,c3);
    return 0;
}

        编译并运行,输入a,空格和b,结果如下:

3、输入函数垃圾清理

        使用输入函数可能会留下垃圾,比如下面这个例子:

#include <stdio.h>
int main()
{
    int x;
    char ch;
    scanf("%d",&x);
    scanf("%c",&ch);
    printf("x =%d ch = %c \n",x,ch);
    return 0;
}

        编译并运行,输入1和a结果如下:

        可以看见只输入了个1,字符还没输入的时候,编译器将回车当成有效字符输入了,那怎么避免这种情况呢?

1、方法1:用getchar清除

#include <stdio.h>
int main()
{
    int x;
    char ch;
    scanf("%d",&x);
    getchar();
    scanf("%c",&ch);
    printf("x =%d ch = %c \n",x,ch);
    return 0;
}

        编译并运行,结果如下:

        可以看到空格被吸收了,字符成功输入进去了。

2、方法2:用“%*c”来 吃掉

#include <stdio.h>
int main()
{
    int x;
    char ch;
    scanf("%d",&x);
    scanf("%*c%c",&ch);
    printf("x =%d ch = %c \n",x,ch);
    return 0;
}

        编译并运行,结果如下:

        可以看到回车被抑制符*给屏蔽掉了。

4、字符串输入函数gets

        gets()是 C 语言的字符串输入函数,用于从标准输入读取一行字符串存入字符数组,并自动加 ‘\0’ 。但在Visual Studio 2022版本中,其头文件里将字符串输入函数定义成了gets_s()。

        下面使用代码进行举例:

#include <stdio.h>
int main()
{
    char a[6], b[6];
    gets_s(a);
    gets_s(b);
    puts(a);//输出完立马换行
    puts(b);
    return 0;
}

        编译并运行,分别输入hello和world,输入结果如下:

        注:与scanf函数不同,gets函数并不以空格作为字符串输入结束的标志

        

                        

        

                                                                      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值