c语言 用getchar函数读入两个字符给c1 c2 用putchar和printf输出 思考问题

               

用getchar函数读入两个字符给c1,c2,分别用putchar和printf输出这两个字符。思考以下问题:

(1)变量c1和c2定义为字符型还是整型?或二者皆可?

(2)要求输出c1和c2的ASCII码,应如何处理?

(3)整形变量和字符变量是否在任何情况下都可以互相代替?char c1, c2;和int  c1, c2;是否无条件等价?

程序:

#include<stdio.h>

int main()

{

 char c1, c2;

 printf("请输入两个字符c1,c2:");//输入的两个字符之间没有空格,连续输入

 c1 = getchar();

 c2 = getchar();

 printf("用putchar输出结果为:");

 putchar(c1);

 putchar(c2);

 printf("\n");

 printf("用printf输出结果为:");

 printf("%c %c\n",c1,c2);

 /*printf("%d,%d\n", c1, c2);*/

 return 0;

}

结果:

请输入两个字符c1,c2:ab

用putchar输出结果为:ab

用printf输出结果为:a b

请按任意键继续. . .

注意:输入的两个字符之间没有空格,连续输入。

如果分两行输入a,b,则:

请输入两个字符c1,c2:a

用putchar输出结果为:a

 

用printf输出结果为:a

 

请按任意键继续. . .

输入a后按回车键,结果还未来得及输入b,程序马上输出了其下4行结果(包括2个空行)。用putchar输出c1,就输出了字符a,在输出c2时,就把换行符转换为回车和换行两个操作,输出一个换行,后面的printf("\n");又输出一个换行,所以就相当于输出一个空行,此行不显示任何字符。后面用printf函数输出c1和c2,同样也输出了字符a和一个空行。

下面回答问题:

(1)c1和c2可以定义为字符型或整型,二者皆可。

(2)用printf函数输出,使用%d格式符,即:

printf("%d,%d\n", c1, c2);

结果为:97,98

(3)字符变量占1个字节,整型变量占2或4个字节。故整型变量在可输出字符的范围内(ASCII码为0到127之间的字符)是可以与字符型数据互相转换的。如果整数在此范围外,不能代替。

拓展延伸:

程序1:

#include<stdio.h>

int main()

{

 int  c1, c2;

 printf("请输入两个整数c1,c2:");

 scanf("%d,%d", &c1, &c2);

 printf("按字符输出结果为:\n");

 printf("%c,%c\n", c1, c2);

 printf("按ASCII码输出结果为:\n");

 printf("%d,%d\n", c1, c2);

 return 0;

}

结果:

请输入两个整数c1,c2:97,98

按字符输出结果为:

a,b

按ASCII码输出结果为:

97,98

请按任意键继续. . .

程序2:

#include<stdio.h>

int main()

{

 char c1, c2;

 int i1, i2;

 printf("请输入两个字符c1,c2:");

 scanf("%c,%c", &c1, &c2);

 i1 = c1;

 i2 = c2;

 printf("按字符输出结果为:\n");

 printf("%c,%c\n", c1, c2);

 printf("按整数输出结果为:\n");

 printf("%d,%d\n", c1, c2);

 return 0;

}

结果:

请输入两个字符c1,c2:a,b

按字符输出结果为:

a,b

按整数输出结果为:

97,98

请按任意键继续. . .

程序3:

#include<stdio.h>

int main()

{

 char c1, c2;

 int i1, i2;

 printf("请输入两个整数i1,i2:");

 scanf("%d,%d", &i1, &i2);

 c1 = i1;

 c2 = i2;

 printf("按字符输出结果为:\n");

 printf("%c,%c\n", c1, c2);

 printf("按整数输出结果为:\n");

 printf("%d,%d\n", c1, c2);

 return 0;

}

结果:

请输入两个整数i1,i2:289,330

按字符输出结果为:

!,J

按整数输出结果为:

33,74

请按任意键继续. . .

整型变量i1和i2在内存中占2或4个字节,而字符变量c1,c2只占一个字节,unsigned char类型可存放0到255的范围内整数,signed char类型可存放-128到127的范围内整数,现在输入的i1和i2的的值已经超过0到255的范围,i1和i2在内存中的存储情况如下表所示:(为简单起见,用两个字节表示)


高8位

低8位

i1

00000001

00100001

i2

00000001

01001010

数据是整数74,是字符i1低8位的数据是整数33,是字符’!’的ASCII码值,故用字符输出c1得到字符’!’,i2低8位的’j’的ASCII码值,故用字符输出c1得到字符’j’。


本文出自 “岩枭” 博客,请务必保留此出处http://yaoyaolx.blog.51cto.com/10732111/1740275

           
  • 4
    点赞
  • 0
    评论
  • 24
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

qq_44947882

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值