C语言getchar()读取一串字符,如何实现?
在C语言中,getchar() 是一个常用的字符输入函数,它可以从标准输入(通常是键盘)读取单个字符。但是,我们也可以利用 getchar() 来读取一串字符,这种方法特别适用于需要逐个处理输入字符的场景,如字符统计、字符串处理等。
getchar() 函数的原型定义在 stdio.h 头文件中,它的原型是:
int getchar(void);
getchar() 不接受任何参数,它的返回值是读取到的字符的 ASCII 码值(以 int 类型返回),或者在遇到文件结束符(EOF)时返回 -1。
基本用法
我们先来看一个简单的例子,展示如何使用 getchar() 读取一串字符直到遇到换行符:
#include <stdio.h> int main() { int ch; printf("请输入一串字符:\n"); while ((ch = getchar()) != '\n' && ch != EOF) { putchar(ch); } printf("\n读取完毕\n"); return 0; }
在这个例子中,我们使用 while 循环来持续读取字符。循环会一直执行,直到遇到换行符('\n')或文件结束符(EOF)。每读取一个字符,我们就立即使用 putchar() 函数将其输出。
运行这段代码,输入一串字符后按回车,你会看到类似这样的输出:
请输入一串字符: Hello, World! Hello, World! 读取完毕
字符计数
我们可以稍微修改上面的代码,来统计输入的字符数量:
#include <stdio.h> int main() { int ch; int count = 0; printf("请输入一串字符:\n"); while ((ch = getchar()) != '\n' && ch != EOF) { putchar(ch); count++; } printf("\n你输入了 %d 个字符\n", count); return 0; }
这个程序会计算输入的字符数量,但不包括换行符。运行结果可能如下:
请输入一串字符: C programming is fun! C programming is fun! 你输入了 22 个字符
处理多行输入
如果我们想要处理多行输入,可以使用 EOF 作为结束标志。在大多数系统中,你可以通过按 Ctrl+D(Unix/Linux)或 Ctrl+Z(Windows)来发送 EOF 信号。
#include <stdio.h> int main() { int ch; int lines = 0; int chars = 0; printf("请输入多行文本(按 Ctrl+D 或 Ctrl+Z 结束):\n"); while ((ch = getchar()) != EOF) { putchar(ch); chars++; if (ch == '\n') { lines++; } } printf("\n你输入了 %d 行,共 %d 个字符\n", lines, chars); return 0; }
这个程序会统计输入的行数和字符总数。示例输出:
请输入多行文本(按 Ctrl+D 或 Ctrl+Z 结束): First line Second line Third line ^D 你输入了 3 行,共 33 个字符
输入验证
getchar() 还可以用于输入验证,例如,我们可以创建一个程序,只接受数字输入:
#include <stdio.h> #include <ctype.h> int main() { int ch; int num = 0; printf("请输入一个正整数:"); while ((ch = getchar()) != '\n' && ch != EOF) { if (isdigit(ch)) { num = num * 10 + (ch - '0'); } else { printf("错误:请只输入数字\n"); return 1; } } printf("你输入的数字是:%d\n", num); return 0; }
这个程序使用 isdigit() 函数(来自 ctype.h)来检查每个输入的字符是否为数字。如果输入非数字字符,程序会报错并退出。
注意事项
使用 getchar() 读取字符串时,需要注意以下几点:
- getchar() 会读取所有字符,包括空格和制表符。
- 如果输入缓冲区中有残留的换行符,getchar() 会读取到这个换行符,这在多次调用 getchar() 或与其他输入函数混用时可能会导致问题。
- getchar() 在遇到 EOF 时返回 -1,所以在处理用户输入时,最好同时检查 EOF 和换行符。