|
发表于 2023-8-28 16:45:37
|
显示全部楼层
本楼为最佳答案
回帖奖励 +2 鱼币
这个问题可能是由于getchar()函数处理输入缓冲区中的换行符造成的。当你在键盘上输入一个字符并按下回车键时,实际上在输入缓冲区中会有两个字符:你输入的字符和一个换行符('\n')。getchar()函数每次只会读取一个字符,所以当你第一次调用getchar()时,它会读取你输入的字符,当你再次调用getchar()时,它会读取换行符。
你的代码中有两个getchar()。第一个getchar()是用来读取用户的输入,第二个getchar()是用来读取换行符。但是,这只在用户输入后立即按下回车键时有效。如果用户在输入字符后没有立即按下回车键,那么第二个getchar()将会等待用户的下一个输入,这可能会导致while循环只执行一次。
你可以通过以下几种方式来解决这个问题:
使用scanf()函数替代getchar(),并在格式字符串中添加一个空格,以忽略换行符:
- char ch;
- while (i--)
- {
- printf("是否添加记录(Y/N):");
- scanf(" %c", &ch);
- if (ch == 'Y')
- {
- addMsg(&Msg);
- }
- else
- {
- break;
- }
- }
复制代码
使用一个循环来清空输入缓冲区,确保下一次读取时只会读取用户的新输入:
- char ch;
- while (i--)
- {
- printf("是否添加记录(Y/N):");
- ch = getchar();
- while (getchar() != '\n'); // 清空输入缓冲区
- if (ch == 'Y')
- {
- addMsg(&Msg);
- }
- else
- {
- break;
- }
- }
复制代码
这两种方法都可以解决你的问题,你可以根据你的需求来进行修改
求最佳答案 |
|