guhusf 发表于 2021-1-23 07:30:26

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:41:51

本帖最后由 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)                                        ;
}

guhusf 发表于 2021-1-23 12:11:25

jackz007 发表于 2021-1-23 11:41
看似简单的要求,实现起来还是挺麻烦的

谢谢大佬!

sunrise085 发表于 2021-1-23 12:16:58

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

guhusf 发表于 2021-1-23 12:38:13

sunrise085 发表于 2021-1-23 12:16


谢谢大佬

guhusf 发表于 2021-1-23 13:49:33

jackz007 发表于 2021-1-23 11:41
看似简单的要求,实现起来还是挺麻烦的

大佬,19到21步没看懂,能解释一下这几步的作用嘛

sunrise085 发表于 2021-1-23 14:01:35

guhusf 发表于 2021-1-23 13:49
大佬,19到21步没看懂,能解释一下这几步的作用嘛

从16行开始说吧
如果输入的是##,那么就会满足if条件,执行 if 语句块,即执行break,跳出while循环;
如果输入的不是##,那么不满足if条件,执行else语句块,即执行fputs,将输入内容写入文件。

guhusf 发表于 2021-1-23 14:25:30

sunrise085 发表于 2021-1-23 14:01
从16行开始说吧
如果输入的是##,那么就会满足if条件,执行 if 语句块,即执行break,跳出while循环;
...

大佬,我测试了你的程序,发现我输入的空格和换行都被忽略了。这是为什么呢{:10_319:}

guhusf 发表于 2021-1-23 14:45:08

guhusf 发表于 2021-1-23 14:25
大佬,我测试了你的程序,发现我输入的空格和换行都被忽略了。这是为什么呢

哦哦因为用的是scanf
页: [1]
查看完整版本: C语言如何实现只有输入##才退出输入呢(输入enter不退出)