【问题标题】:how to read a char value in C without going to next line如何在 C 中读取 char 值而不转到下一行
【发布时间】:2013-11-14 15:15:21
【问题描述】:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void) 
{

       char p,q;
       printf("Hello enter char: ");
       p=getchar();
       printf("the char is: %c\n",p);

       printf("Hello enter char: ");
       q=getchar();
       printf("the char is: %c\n",q);
    return 0;
}

(为什么我的第二个 printf 和 scanf 的输出没有等待我在退出程序之前输入一个字符?.....我的意思是你知道它在哪里说 q=getchar();???它不应该在退出程序之前等待输入一个字符吗?但是由于某种原因程序在进入下一行时才退出......

【问题讨论】:

  • 你指的是什么scanf()?当你“输入”你的字符并按下键盘上的时,你认为你输入了多少个字符?提示:它不是一个。
  • 我在屏幕上看到第一个打印出来,然后我输入一个字符,然后按回车键...然后计算机打印出第二个和第三个打印输出....为什么不只是打印出第二个打印输出并等到我在输入字符后按 Enter 键?
  • @HardyFeng 哦,谢谢!这就是问题...所以请告诉我如何解决这个问题??
  • 回车键也作为输入。
  • getchar() 返回 int,而不是 char,尽管有名称。

标签: c types char scanf


【解决方案1】:

当按下回车键时,一个字符'\n'正在输入。所以你的getchar()在你输入第二个字符之前被使用了。我想你想要下面的代码:

#include <stdio.h>
#include <stdlib.h>

int main(void) {
    char p,q;
    printf("Hello enter char: ");
    p=getchar();
    printf("the char is: %c\n",p);

    int c; 
    while((c = getchar()) != '\n' && c != EOF && c != ' ') ; 

    printf("Hello enter char: ");
    q=getchar();
    printf("the char is: %c\n",q);
    return 0;
}

【讨论】:

  • getchar() 返回int,如果cchar,则EOF 检查会有问题。
【解决方案2】:

您也可以使用getch() 代替getchar() 来避免按回车键。

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

int main(void) 
{

       char p,q;
       printf("Hello enter char: ");
       p=getch();
       printf("the char is: %c\n",p);

       printf("Hello enter char: ");
       q=getch();
       printf("the char is: %c\n",q);
       return 0;
}

【讨论】:

    【解决方案3】:

    当遇到无效的用户输入时,使用 getchar() 来读取字符,以及其他类似的实例,其中输入流中存在不想要的字符(就像在你的情况下它是换行符)我定义了一个名为 FLUSH 的常量

       #define FLUSH while(getchar() != '\n')
    

    解决问题。该语句的作用是读取一个字符,然后将其丢弃。现在,如果您尝试将其放在您的一个 getchars 之后,即

       p=getchar();
       printf("the char is: %c\n",p);
       FLUSH;
    

    它将读取换行符然后停止,因为 while 语句中的条件不再成立。

    注意:对提示使用 getchar() 会在输入流中留下一个 '\n',一旦你再次提示并且没有消除那个 '\n',你会发现这很麻烦。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-04
      • 1970-01-01
      • 2020-11-28
      • 1970-01-01
      • 1970-01-01
      • 2018-02-06
      • 2014-09-15
      • 1970-01-01
      相关资源
      最近更新 更多