getchar()不会让控制台保持打开状态

时间:2016-04-09 16:11:38

标签: c scanf

我正在编写此代码来比较两个字符串。代码工作,我唯一的问题是它完成后保持控制台打开。通常,getchar()就像一个魅力,但在这种情况下它只是无效。我认为这是由于if-else功能造成的。如何让控制台保持打开状态?

#include <stdio.h>
#include <string.h>
#define SIZE 50

int main (int argc , char** argv) {
    char isim[SIZE];
    printf("Adinizi yazin:\n");
    scanf("%s", isim);
    if(strcmp(isim, "Cihan") == 0)
        printf("Hosgeldiniz!\n");
    else
        printf("Cihan degilsiniz. Lutfen programi terk edin.\n");
    getchar();
    return 0;
}

4 个答案:

答案 0 :(得分:1)

一个接一个地使用两个getchar()scanf()不会从输入缓冲区中删除换行符,因此首先getchar()&#34;吃掉&#34;换行。第二个getchar()等待下一个输入,这将使控制台保持打开状态。

来自cplusplus.com的scanf()页:

  

该函数将读取并忽略在下一个非空白字符之前遇到的任何空格字符(空格字符包括空格,换行符和制表符 - 请参阅isspace)。

我的重点。

答案 1 :(得分:0)

您可以在 conio.h 标头中使用声明: getch(); getch()没有读取缓冲区中的字符,它直接从键盘读取字符。因此,如果您尚未输入,控制台将打开。 getchar()从缓冲区读取字符,在 scanf()之后输入缓冲区中的换行符不被读取并保存在缓冲区中。然后 getchar()将读取换行符并且语句停止,控制台将关闭。

答案 2 :(得分:0)

#include <stdio.h>
#include <string.h>
#include <conio.h>
#define SIZE 50

int main (int argc , char** argv) {
char isim[SIZE];
printf("Adinizi yazin:\n");
scanf("%s", &isim);
if(strcmp(isim, "Cihan") == 0)
    printf("Hosgeldiniz!\n");
else
    printf("Cihan degilsiniz. Lutfen programi terk edin.\n");
getch();
return 0;
}

答案 3 :(得分:0)

输入在换行后发送到程序,但

scanf("%s", &isim );

将换行符留在输入缓冲区中,因为%s格式在某些非空格后遇到第一个空白字符时停止。 getchar()然后立即返回该换行符,不等待。

要使代码正常工作,请尝试使用此类代码

scanf("%s", &isim );
while( getchar() != '\n' ){ 
  /* flush to end of input line */ 
}