实验2-7 再谈输入函数

本文详细阐述了C语言中scanf和getchar函数的使用方法及注意事项,包括输入数据的分隔符使用、输入缓冲区的理解、函数运行时的用户交互流程,以及多余输入数据对程序的影响。通过实例分析,帮助开发者更好地掌握这两个核心输入函数的正确应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

实验目的:

本次实验解决如下两个问题。

1.使用scanf函数输入多个数据时通常用空格、回车分隔,可以用其它字符分隔吗?

2.scanf函数(getchar)一定会暂停程序的执行让用户输入数据吗?

实验步骤:

1.由附录A可知scanf函数中的格式字符串主要由普通字符和转换控制字符组成。如果格式字符串中不含普通字符即全部由转换控制字符组成如"%d%d",则用户输入的多个数据之间通常用空格、回车分隔。如果格式字符串中含有普通字符如"%d,%d",则用户输入的多个数据之间必须有一个相同的普通字符。

1.1填表并编程验证。

scanf("%d,%d", &i, &j)

第一次

第二次

第三次

用户输入

23 32

23 ,32

23,  32

以"%d,%d"格式预期的输出

 

 

 

以"%d,%d"格式实际的输出

 

 

 

分析:

总结格式字符串中含有普通字符后scanf函数的用法。(前一个输入数据与普通字符之间可以有空格吗如第二次所示?普通字符与后一个输入数据之间可以有空格吗?)

1.2填表并编程验证。

scanf("%d%d\n", &i, &j)

第一次

第二次

第三次

用户输入

23 32

 

23 32

\n

23 32\n

以"%d,%d"格式预期的输出

 

 

 

以"%d,%d"格式实际的输出

 

 

 

分析:

scanf函数的格式字符串中的\n是转义序列吗?为什么?

2.输入函数运行时会等待用户输入数据,用户以回车键来确认数据输入完毕,如果一次输入多于输入函数实际所需的数据,则多余的输入数据会给程序带来什么影响?(会影响正在运行的输入函数吗?会影响后面运行的输入函数吗?多余的输入数据会丢失吗?)

2.1根据程序填表。

#include <stdio.h>

void main()

{

       int i;

       scanf("%d", &i);

       printf("%d\n", i);

}

用户的输入

23 32 abc

程序预期的输出

 

程序实际的输出

 

#include <stdio.h>

void main()

{

       char ca;

       ca = getchar();

       putchar(ca);

}

用户的输入

23 32 abc

程序预期的输出

 

程序实际的输出

 

分析:

多余的输入数据会影响正在运行的输入函数吗?

2.2根据程序填表。

#include <stdio.h>

void main()

{

       int i, j;

       scanf("%d", &i);

       scanf("%d", &j);

       printf("%d,%d\n", i, j);

}

用户的输入

23 32 abc

程序预期的输出

 

程序实际的输出

 

分析:

如果程序运行时只输入23便按下回车键确认输入完毕,则会出现什么情况?

把程序改动如下再次测试。

#include <stdio.h>

void main()

{

       int i, j;

       scanf("%d", &i);

       printf("%d,%d\n", i, j);

scanf("%d", &j);

       printf("%d,%d\n", i, j);

}

通过输出可以发现两种数据的输入方式区别在于?

#include <stdio.h>

void main()

{

       char ca, cb;

       ca = getchar();

       cb = getchar();

       printf("%c,%c\n", ca, cb);

}

用户的输入

23 32 abc

程序预期的输出

 

程序实际的输出

 

分析:

多余的输入数据会影响后面运行的输入函数吗?

#include <stdio.h>

void main()

{

       int i, j;

       char ca, cb;

       ca = getchar();

       scanf("%d", &i);

       scanf("%d", &j);

       cb = getchar();

       printf("%d,%d\n", i, j);

       printf("%c,%c,%d\n", ca, cb,cb);

}

用户的输入

23 32 abc

程序预期的输出

 

程序实际的输出

 

分析:(可参考练习2.22)

1)如何理解“输入缓冲区”?

2)scanf函数和getchar函数共用一个“输入缓冲区”吗?为什么?

3)输入函数在何种情况下会中断程序的运行让用户输入数据?

4)完成输入后字符变量cb的值是   ,为什么?

下面程序中带下划线的语句有何作用?

#include <stdio.h>

void main()

{

       int i, j;

       char ca;

       printf("请输入两个整数\n");

       scanf("%d%d", &i, &j);

       printf("请输入一个字符\n");

       getchar();

       ca = getchar();

       printf("%d,%d\n", i, j);

       printf("%c,%d\n", ca, ca);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值