如何在不进入下一行的情况下读取C中的char值

时间:2013-11-04 01:26:01

标签: c types char scanf

#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(); ???它不应该在退出程序之前等待输入一个字符?但由于某种原因,程序只是在它进入下一行时退出...

3 个答案:

答案 0 :(得分:1)

按Enter键时,输入一个字符'\ 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;
}

答案 1 :(得分:0)

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

#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;
}

答案 2 :(得分:0)

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

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

解决问题。这句话的作用是它读取一个角色,然后抛弃它。现在,如果你试图把它放在你的一个getchars之后,即

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

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

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