C语言如何实现只有输入##才退出输入呢(输入enter不退出)
部分程序:void BUILD_E()
{
FILE *fp;
char name,text;
char way = "e:\\";//设置路径为e盘
printf("请输入文件名称:\n");
scanf("%s",name);
strcat(name,".txt");//给文件名加上后缀
strcat(way,name);//添加路径
fp = fopen(way,"w");
printf("请输入内容:\n");
while((text = getchar()) && text != '#''#')//只有输入##号时才退出输入
{
scanf("%s",text);
fputs(text,fp);
}
fclose(fp);
} 本帖最后由 jackz007 于 2021-1-23 11:44 编辑
看似简单的要求,实现起来还是挺麻烦的
void BUILD_E(void)
{
FILE * fp ;
char name , text ;
char way = "e:\\" ; // 设置路径为e 盘
char c ;
int i , n ;
printf("请输入文件名称:") ;
scanf("%s" , name) ;
strcat(name , ".txt") ; // 给文件名加上后缀
strcat(way , name) ; // 添加路径
fp = fopen(way , "w") ;
printf("请输入内容:\n") ;
fflush(stdin) ; // 清除 scanf() 遗留在键盘缓冲区内的换行符 '\n',否则,会给后续 getchar() 的文本输入带来麻烦
for(i = n = 0 ; ;) {
c = getchar() ;
if(c != '#') {
if(c == '\n') {
if(i) text = c ;
text = c ;
text = '\0' ;
fputs(text , fp) ;
i = 0 ;
n = 0 ;
} else {
if(i) {
text = c ;
text = c ;
i = 0 ;
} else {
text = c ;
}
}
} else {
if(i) {
if(n) {
text = '\0' ;
fputs(text , fp);
}
break ;
}
i ++ ;
}
}
fclose(fp) ;
} jackz007 发表于 2021-1-23 11:41
看似简单的要求,实现起来还是挺麻烦的
谢谢大佬! void BUILD_E()
{
FILE *fp;
char name,text;
char way = "e:\\";//设置路径为e盘
printf("请输入文件名称:\n");
scanf("%s",name);
strcat(name,".txt");//给文件名加上后缀
strcat(way,name);//添加路径
fp = fopen(way,"w");
printf("请输入内容:\n");
while(1)
{
scanf("%s",text);
//printf("%s",text);
if(!strcmp(text,"##"))//只有单纯输入##然后回车才会跳出循环结束输入,若输入的##后面还有其他内容,则不会结束输入
break;
else
fputs(text,fp);
}
fclose(fp);
} sunrise085 发表于 2021-1-23 12:16
谢谢大佬 jackz007 发表于 2021-1-23 11:41
看似简单的要求,实现起来还是挺麻烦的
大佬,19到21步没看懂,能解释一下这几步的作用嘛 guhusf 发表于 2021-1-23 13:49
大佬,19到21步没看懂,能解释一下这几步的作用嘛
从16行开始说吧
如果输入的是##,那么就会满足if条件,执行 if 语句块,即执行break,跳出while循环;
如果输入的不是##,那么不满足if条件,执行else语句块,即执行fputs,将输入内容写入文件。 sunrise085 发表于 2021-1-23 14:01
从16行开始说吧
如果输入的是##,那么就会满足if条件,执行 if 语句块,即执行break,跳出while循环;
...
大佬,我测试了你的程序,发现我输入的空格和换行都被忽略了。这是为什么呢{:10_319:} guhusf 发表于 2021-1-23 14:25
大佬,我测试了你的程序,发现我输入的空格和换行都被忽略了。这是为什么呢
哦哦因为用的是scanf
页:
[1]