C语言中使用getchar()存储字符仅保留最后一个字符的问题
解决C语言中getchar()仅保留最后一个输入字符的问题
嘿,我太懂这种卡壳的感觉了!刚学C的时候我也犯过一模一样的错——用单个字符变量存getchar()的结果,结果循环里看着每次都能拿到新字符,但退出循环就只剩最后一个,简直挠头😅
问题根源
你应该是只用了一个char类型的变量来接收每次getchar()的返回值对吧?比如这样:
char c; while ((c = getchar()) != EOF) { printf("当前字符:%c\n", c); } // 这里c只会是最后一个输入的字符
每次循环都会把新读取的字符覆盖掉变量里旧的值,所以循环内能看到当前字符,但循环结束后自然只剩最后一次读取的内容。要统计指定字符的出现次数,我们得把所有输入的字符都存下来才行。
解决方案:用数组存储全部输入
我们可以用一个字符数组来保存所有输入的字符,再配合一个索引变量记录存储的位置,这样就能把每一个字符都保留下来了。下面是完整的示例代码:
#include <stdio.h> int main() { // 定义足够大的数组存储输入(可根据需求调整大小) char input_content[1000]; int current_index = 0; char current_char; printf("请输入任意内容,输入Ctrl+D(Linux/macOS)或Ctrl+Z(Windows)结束输入:\n"); // 循环读取字符,直到输入结束(EOF) while ((current_char = getchar()) != EOF) { input_content[current_index] = current_char; current_index++; // 循环内实时显示当前输入的字符 printf("刚输入的字符:%c\n", current_char); } // 必须给数组添加字符串结束符'\0',否则打印时会出现乱码 input_content[current_index] = '\0'; printf("\n你输入的全部内容是:\n%s\n", input_content); // 接下来统计指定字符的出现次数 char target_char; printf("\n请输入要统计的字符:"); // 注意前面的空格,用来跳过输入结束时残留的换行符 scanf(" %c", &target_char); int count = 0; // 遍历数组统计目标字符 for (int i = 0; i < current_index; i++) { if (input_content[i] == target_char) { count++; } } printf("字符'%c'一共出现了%d次\n", target_char, count); return 0; }
关键注意点
- 数组大小:示例里用了1000长度的数组,如果需要处理更长的输入,可以改用动态内存分配(
malloc/realloc),避免数组溢出。 - 字符串结束符:C语言的字符串必须以
'\0'结尾,否则用%s格式符打印时会读取到内存里的垃圾数据,出现乱码。 - 结束条件:示例用
EOF作为输入结束标志,你也可以改成比如遇到某个特定字符(比如'#')就终止循环,只需要把!= EOF改成!= '#'即可。
内容的提问来源于stack exchange,提问作者Tcranmer
相关产品推荐
相关产品推荐

