麦香洋芋 发表于 2023-11-13 16:15:26

printf输出不完整

#include <conio.h>
#include <stdio.h>
int main()
{
         
    int i=0;
char c;
while(1)
{
   
c='\0';
while(c!=13 && c!=27)
{
   c=getch();
   printf("%c\n",c);
}
if(c==27)
break;

i++;
printf("The NO. is %d\n",i);
}
printf("The end\n");
    return 0;

}
这是之前在小甲鱼学C的课程里ppt的代码,为什么运行后按下Esc键后输出的是he end,少了个T,怎么解决呀?谢谢(本人用的是devc++编译)

isdkz 发表于 2023-11-13 16:15:50

问题出在getch()函数上,它会读取一个字符但不会回显到屏幕上。当你按下 Esc 键时, getch()会读取该键并继续执行下面的代码,然后printf("The end\n");会被执行。但是由于 Esc 键并不会被回显到屏幕上,所以你会看到的输出是 "he end"。解决这个问题的方法是使用getche()函数,它会读取一个字符并将其回显到屏幕上。

你可以将getch()替换为getche() ,然后重新编译运行你的代码。这样当你按下 Esc 键时,你会看到 "The end" 被正确输出。

Mike_python小 发表于 2023-11-13 16:18:26

问题分析

你遇到的问题是在按下 Esc 键后输出 "The end" 时,缺少了一个 'T' 字母。这是因为在使用 getch() 函数获取键盘输入时,它会读取并返回键盘缓冲区中的字符,但不会显示在控制台上。这就导致了你在按下 Esc 键后,最后一个字符 'T' 并没有被显示出来。

解决方法

为了解决这个问题,你可以修改代码,将 printf("%c\n", c); 这行代码移动到 if(c==27) 的条件判断块内部,在按下 Esc 键后再显示字符 'T'。修改后的代码如下:


#include <conio.h>
#include <stdio.h>

int main()
{
    int i = 0;
    char c;
    while (1)
    {
      c = '\0';
      while (c != 13 && c != 27)
      {
            c = getch();
            if (c == 27)
                break;
            printf("%c\n", c);
      }
      if (c == 27)
            break;

      i++;
      printf("The NO. is %d\n", i);
    }
    printf("The end\n");
    return 0;
}


通过将 printf("%c\n", c); 移动到 if(c==27) 的条件判断块内部,确保在按下 Esc 键后再显示字符 'T',从而解决了输出不完整的问题。祝你编程顺利!

麦香洋芋 发表于 2023-11-15 15:33:54

Mike_python小 发表于 2023-11-13 16:18
问题分析

你遇到的问题是在按下 Esc 键后输出 "The end" 时,缺少了一个 'T' 字母。这是因为在使用 getch( ...

成了,谢谢你!

麦香洋芋 发表于 2023-11-15 15:35:23

isdkz 发表于 2023-11-13 16:15
问题出在getch()函数上,它会读取一个字符但不会回显到屏幕上。当你按下 Esc 键时, getch()会读取该 ...

谢谢回答,不过改了之后还是漏,而且比如按一下a,显示两个a了。不过按照下面朋友的修改就解决了
页: [1]
查看完整版本: printf输出不完整