本文共 2011 字,大约阅读时间需要 6 分钟。
实验目的:
本次实验解决如下两个问题。
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);
}
转载地址:http://xbdti.baihongyu.com/