- 格式:putchar( 参数 );
- 参数:可以是整型,字符型,转义字符或表达式
注:参数不可以为字符串
- 功能:输出单个字符
- printf("%c")可替代putchar()
- PS:字符加单引号原样输出,不加单引号输出值
- 举栗子:putchar('B'); //输出B putchar(B);//输出66
- 若单引号中是转义字符,则转化成ASCII对应的字符输出:
-putchar('\101');//101是八进制,转化成十进制=65→A
- 所需要用到的文件命令是:#include <stdio.h>
- 例题:键入一串字符,以回车换行符为结束标志,统计并输出其中数字字符的个数。
#include<stdio.h>
void main()
{ char ch; int n=0;
ch=getchar();
while(ch!='\n') {
if ( ) n++;// 第一空*/
; } / 第二空 */
printf("n=%d\n", );/ 第三空 */ }
- 代码写法1:
#include<stdio.h>
int main() {
char ch; int n = 0;
//在主函数中声明了两个变量,ch 是用来存储用户输入的字符,n 是用来保存数字字符的数量,初始值为0
ch = getchar(); //从标准输入中获取一个字符并将其赋值给变量 ch
while (ch != '\n') {
//直到用户输入的字符是换行符 '\n' 停止循环
if (ch>='0'&& ch<='9') n++;// 判断变量 ch 是否是数字字符
ch = getchar();//获取下一个字符,继续循环,n++
} // 第二空 * /
printf("n=%d\n", n); //第三空
}
//问题1:1.ch = getchar();和ch = getchar();不会重复吗
//回答问题1:第一个getchar()只获取首个字符,第二个getchar()获取下一个也就是后边的字符
//注意2个getchar的位置:第一个getchar在循环外面,只执行一次
//第2个getchar在循环内部,它获取了循环每一轮迭代中的字符
//问题2:ch = getchar()只读取一个字符,如果我输入一串字符那么其他的字符不会丢失吗?
//回答问题2:不会丢失,当你读取第一个字符时,其他字符都在缓冲区等待
- 流程分析:如果我从键盘输出一串字符串为:AC5
- ch = getchar()会读取第一个字符 'A' 并将其存储在变量
ch
中 - 由于
ch
包含的字符是 'A' 而不是换行符 '\n',所以条件为真,循环会继续执行 - 条件判断检查字符 'A' 是否是数字, 'A' 不是数字,所以
n
的值仍为 0 - ch = getchar() 它会读取 'C' 并将其存储在变量
ch
中...... - 直到读取'5' 是数字,
n
才=1 - 按下回车键时,
getchar()
会获取换行符 '\n',循环条件将不再为真,循环终止
注:在程序执行过程中,当执行 getchar() 获取字符时,会等待输入。当你输入字符(例如,'A')并按下回车键时,输入字符会被缓存,等待程序读取。 在这个过程中,输入字符并不会丢失,而是存储在输入缓冲区中,等待程序读取。getchar() 函数实际上会读取输入缓冲区中的下一个字符,并将其返回给程序。如果程序不立刻读取输入缓冲区中的字符,它们会一直等待,直到被读取为止。 所以,在你输入 'A' 后,其他字符 'C', '5', 都会在输入缓冲区中等待,程序将依次读取它们,一个字符一个字符地进行处理。
- 代码写法2:
#include <stdio.h>
int main() {
char ch;
int n = 0;
while ((scanf_s("%c", &ch)) == 1) {
//判断条件变成:scanf_s 函数返回成功读取的项目数。
//如果成功读取了一个字符,它会返回 1;如果没有成功读取,它会返回 0
//如果成功读取了一个字符并将其分配给变量 ch,则条件为真,即返回值为 1
if (ch >= '0' && ch <= '9')
n++;
}
printf("n=%d\n", n);
return 0;
}