第24课动手第0题关于数据类型
#include <stdio.h>int main()
{
int matrix = {0};
int i, j;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
matrix = getchar();
}
}
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
printf("%c ", matrix);
}
printf("\n");
}
return 0;
}
问题1:
定义 matrix 时用的 int ,说明数据是整形的
为什么 printf 输出时,用的是字符型而不是整型?
虽然用整型的话会输出错误的数值,但是为什么错并没有明白
问题2:
我个人一开始的思路是需要用一个scanf的函数来读取输入数据的
但不用scanf也能实现功能,为什么不需要scanf呢? 本帖最后由 jackz007 于 2019-3-29 19:36 编辑
1、在 C / C++ 语言中,每个字符都是通过编码进行表示的,也就是说,整形数与字符之间是存在联系的。例如,整数 65 是字符 'A' 的编码,97 是字符 'a' 的编码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main()
{
int c1 , c2 ;
c1 = 65 ;
c2 = 97 ;
printf("%c , %c\n" , c1 , c2) ; // 屏幕输出 A , a
}
这 2 个整数如果按 '%c' 显示,看到的就是字母,如果按 '%d' 显示,看到的就是整数。
2、scanf() 与 getchar() 显然功能不同,用途也不同,scanf() 根据需要,可以从键盘输入整数、浮点数、字符、字符串等,而且,可以同时接受多个变量输入,在实践中使用比较广泛;getchar() 只能接受单字符输入,一般用于在程序中设置按一个键继续的功能,很少用于实质性的信息获取。使用 getchar() 接受信息有个问题,就是按下字符键还得按下回车键才能完成输入,这样,需要用两个 getchar() 指令才能把键入的内容完整接收, 第一次取到字符,第二次取到回车符。所以,在编程中一定要引起特别的注意。在本例中,楼主的代码在每次循环中,只设计了一个 getchar(),如果本次取到字符,那么,在下次循环中,取到的将是回车符,这肯定不是楼主所愿的。
所以,正确的做法是设置双 getchar() ,丢弃不希望的回车符,就像下面这样:
for (i = 0 ; i < 3 ; i ++) {
for (j = 0 ; j < 3 ; j ++) {
matrix = getchar();
getchar() ;
}
} jackz007 发表于 2019-3-29 19:19
1、在 C / C++ 语言中,每个字符都是通过编码进行表示的,也就是说,整形数与字符之间是存在联系的。 ...
字符通过编码表示我是知道的
是我问题问的不够详细,上串的代码执行以后,输入9个数字是能实现功能的(9个数字按照3x3的矩阵排列)。但是如果把%c换成 %d 却输出不了输入的9个数字,按照道理输入是9个数字的话,不应该是用%d来输出吗? 问题1:
计算机中存放的都是2进制,这点你同意不?字符 'a' ascii 就是整型的 97对吧,最终都是2进制。那么你要定义int也好char也好也没有问题对不对。既然是编程,那么就是灵活的;你觉得怎么方便你就怎么写。
97 %c 输出 不就是'a' 了。
问题2:
scanf getchar 还是那句话。既然是编程,那么就是灵活的;你觉得怎么方便你就怎么写。
哪个函数用起来方便就用哪个。
不要问别人为什么不用。你倒是可以发表自己的看法,比如“我觉得scanf 在这里用起来比 getchar好,”再加上具体好在哪里。
页:
[1]