博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实验2-7 再谈输入函数
阅读量:4144 次
发布时间:2019-05-25

本文共 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/

你可能感兴趣的文章
【web素材】02-10款大气的购物商城网站模板
查看>>
6种方式实现JavaScript数组扁平化(flat)方法的总结
查看>>
49个在工作中常用且容易遗忘的CSS样式清单整理
查看>>
20种在学习编程的同时也可以在线赚钱的方法
查看>>
隐藏搜索框:CSS 动画正反向序列
查看>>
127个超级实用的JavaScript 代码片段,你千万要收藏好(上)
查看>>
【视频教程】Javascript ES6 教程27—ES6 构建一个Promise
查看>>
【5分钟代码练习】01—导航栏鼠标悬停效果的实现
查看>>
127个超级实用的JavaScript 代码片段,你千万要收藏好(中)
查看>>
127个超级实用的JavaScript 代码片段,你千万要收藏好(下)
查看>>
【web素材】03-24款后台管理系统网站模板
查看>>
Flex 布局教程:语法篇
查看>>
年薪50万+的90后程序员都经历了什么?
查看>>
2019年哪些外快收入可达到2万以上?
查看>>
【JavaScript 教程】标准库—Date 对象
查看>>
前阿里手淘前端负责人@winter:前端人如何保持竞争力?
查看>>
【JavaScript 教程】面向对象编程——实例对象与 new 命令
查看>>
我在网易做了6年前端,想给求职者4条建议
查看>>
SQL1015N The database is in an inconsistent state. SQLSTATE=55025
查看>>
RQP-DEF-0177
查看>>