本帖最后由 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[i][j] = getchar();
- getchar() ;
- }
- }
复制代码