你while循环上面 ch = getchar(); 去掉
可以通过添加一个额外的getchar()函数来解决getchar()函数吞没第一个字符的问题,即先读取并忽略第一个字符。例如:
char c; c = getchar(); // 读取并忽略第一个字符 c = getchar(); // 读取第二个字符开始输入的字符
如果输入中包含空格或其他空白字符,可以使用getchar()结合循环读取输入的所有字符,并存储到一个字符数组中。例如:
char str[20] = {0}; char c; int i = 0; while ((c = getchar()) != '\n' && i < 19) { // 将输入存储到字符数组中 str[i++] = c; } str[i] = '\0'; // 添加字符串结束符
可以使用fgets()函数来代替getchar()函数读取字符串,从而更方便地读取整行输入。例如:
char str[20]; fgets(str, 20, stdin); // 读取最多20个字符到str数组中,包括换行符
需要注意的是,fgets()函数会读取输入中的换行符并存储在字符串中。如果需要去除换行符,可以使用strtok()函数或手动替换换行符。例如:
char str[20]; fgets(str, 20, stdin); str[strcspn(str, "\n")] = '\0'; // 用字符'\0'替换换行符
其中strcspn()函数可以获取字符串中第一个匹配指定字符集的位置,从而定位到换行符的位置。然后在该位置上替换为'\0'即可去除换行符。
供参考: