C语言连续输入字符串

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

void main(){
FILE *fp;
char istr[80];
char sign;

if((fp=fopen("test.txt","wt+"))==NULL)
{
printf("File cannot be opened!");
exit(1);
}

do{
printf("input a string:\n");
gets(istr);
fprintf(fp,"%s",istr);
printf("Do you wanna input another string?\nY yes, N no");
sign=getchar();
if(sign=='N')break;
}while(sign=='Y');

fclose(fp);
}

如上,想要输入一个字符串以后,提示是否再次输入,但是我的测试结果是
input a string:
hello,world
Do you wanna input another string?
Y yes, N noY
input a string:
Do you wanna input another string?
Y yes, N no
第二次没等我输入就Y或N了,这是怎么回事?
要怎么修改?多谢

第1个回答  2010-12-08
do{
printf("input a string:\n");
gets(istr);//若未加入getchar()一句,这里每次都会自动从键盘缓冲区获取换行符,不会等待用户按键
fprintf(fp,"%s",istr);
printf("Do you wanna input another string?\nY yes, N no");
sign=getchar();//主要就是这里的问题,当用户键入回车之后,getchar才开始从stdio流中每次读入一个字符,输入多于一个字符,多的字符会留在键盘缓冲区,下次调用就不会等待用户按键
getchar();//消去换行符,前提是上次输入只有一个字符+换行,若输入多个还会出现你说的现象,如输入Ydg。
if(sign=='N')break;
}while(sign=='Y');

或者定义char sign[2];
gets(sign);//会读取换行符转换为null
if(sign[0]=='N')break;//通过sign[0]判断本回答被提问者采纳
相似回答