如兩個圖片所示
我先用getch()嘗試消回車但不行
只有使用get()消回車才可以,為什麼
根据参考链接,getch不是从缓冲区读取字符,而是直接接收当前输入的字符,所以第一个图片中的代码,当执行到getch()这一行时,当前输入任意字符,都会被它接收,然后后面的gets(name)就读取了缓冲区留下的换行,然后就显示图片中的结果了;
而gets()可以从缓冲区读取一个字符串,直到遇到换行符,所以它可以将前面输入遗留在缓冲区的多余字符读走;使用getchar()循环读取字符,直到换行符为止也可以。
测试如下:
参考链接:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
int main(void){
int i,j,sum=0;
int a[5][6]={{1,2,3,4,5,6},{2,3,4,5,6,7},{3,4,5,6,6,8},{4,5,6,7,8,0},{5,6,7,8,9,0}};
for(i=0;i<4;i++){
for(j=0;j<=5;j++){
printf("a[%d][%d]=%d , ",i,j,a[i][j]);
sum = sum+a[i][j];
}
printf("\n");
}
printf("\n===陣列 a 的總和為 : %d \n\n",sum);
int num[3]; // 如果要存儲一個整數到下標為2的數組位置,需要定義數組最少3個元素,否則會數組越界
printf("輸入陣列初值:");
scanf("%d",&num[2]);
printf("num[2]=%d\n",num[2]);
char name[100];
printf("輸入你的名字:");
//getchar();
// https://blog.csdn.net/m0_65601072/article/details/124651590
// https://baike.baidu.com/item/getch%28%29/10996394
// getch();
// https://www.runoob.com/cprogramming/c-function-gets.html
// http://c.biancheng.net/view/233.html
gets(name);
gets(name);
printf("你的名字:%s\n",name);
int str_num = strlen(name);
printf("輸入幾個字元:%d\n",str_num);
system("pause");
return 0;
}
回车换行 2个字符 \r\n
用 getchar();试试。
不知道你这个问题是否已经解决, 如果还没有解决的话:在C语言中,gets()
函数用于读取用户输入的一行字符串,并且这个函数会自动去掉结尾的换行符\n
。而getch()
函数用于从控制台读取单个字符,它并不会去掉结尾的换行符。
这就是为什么使用gets()
函数可以成功消除回车符,而使用getch()
函数无法消除的原因。
为了解决这个问题,可以在使用getch()
函数后加入代码来手动消除回车符。具体的解决方案如下:
#include <stdio.h>
#include <conio.h>
int main() {
char ch;
printf("请输入一个字符: ");
ch = getch();
// 使用getch()函数获得输入后,判断是否为回车符
if (ch == '\r') {
// 如果是回车符,再使用getch()函数获取一个字符
ch = getch();
// 如果获取到的字符也是回车符,则说明输入的只有一个回车符,需要再次获取
if (ch == '\r') {
ch = getch();
}
}
printf("您输入的字符是: %c\n", ch);
return 0;
}
这样就能达到消除回车符的效果。
希望这个解决方案能够帮助到你。如果还有其他问题,请随时提问。