鱼C论坛

 找回密码
 立即注册
查看: 1608|回复: 4

[已解决]printf输出不完整

[复制链接]
发表于 2023-11-13 16:15:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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++编译)
最佳答案
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',从而解决了输出不完整的问题。祝你编程顺利!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

你可以将  getch()  替换为  getche() ,然后重新编译运行你的代码。这样当你按下 Esc 键时,你会看到 "The end" 被正确输出。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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',从而解决了输出不完整的问题。祝你编程顺利!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-11-15 15:33:54 | 显示全部楼层
Mike_python小 发表于 2023-11-13 16:18
问题分析

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

成了,谢谢你!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

谢谢回答,不过改了之后还是漏,而且比如按一下a,显示两个a了。不过按照下面朋友的修改就解决了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-2-3 07:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表