我正在编写此代码来比较两个字符串。代码工作,我唯一的问题是它完成后保持控制台打开。通常,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;
}
答案 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 */
}