鱼C论坛

 找回密码
 立即注册
查看: 1417|回复: 8

[已解决]C语言如何实现只有输入##才退出输入呢(输入enter不退出)

[复制链接]
发表于 2021-1-23 07:30:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
部分程序:
void BUILD_E()
{
FILE *fp;
char name[10],text[10000000];
char way[10] = "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);
}
最佳答案
2021-1-23 11:41:51
本帖最后由 jackz007 于 2021-1-23 11:44 编辑

        看似简单的要求,实现起来还是挺麻烦的
  1. void BUILD_E(void)
  2. {
  3.         FILE * fp                                         ;
  4.         char name[10] , text[1024]                        ;
  5.         char way[10] = "e:\"                             ; // 设置路径为e 盘
  6.         char c[2]                                         ;
  7.         int i , n                                         ;
  8.         printf("请输入文件名称:")                        ;
  9.         scanf("%s" , name)                                ;
  10.         strcat(name , ".txt")                             ; // 给文件名加上后缀
  11.         strcat(way , name)                                ; // 添加路径
  12.         fp = fopen(way , "w")                             ;
  13.         printf("请输入内容:\n")                          ;
  14.         fflush(stdin)                                     ; // 清除 scanf() 遗留在键盘缓冲区内的换行符 '\n',否则,会给后续 getchar() 的文本输入带来麻烦
  15.         for(i = n = 0 ; ;) {
  16.                 c[i] = getchar()                          ;
  17.                 if(c[i] != '#') {
  18.                         if(c[i] == '\n') {
  19.                                 if(i) text[n ++] = c[0]   ;
  20.                                 text[n ++] = c[i]         ;
  21.                                 text[n ++] = '\0'         ;
  22.                                 fputs(text , fp)          ;
  23.                                 i = 0                     ;
  24.                                 n = 0                     ;
  25.                         } else {
  26.                                 if(i) {
  27.                                         text[n ++] = c[0] ;
  28.                                         text[n ++] = c[i] ;
  29.                                         i = 0             ;
  30.                                 } else {
  31.                                         text[n ++] = c[i] ;
  32.                                 }
  33.                         }
  34.                 } else {
  35.                         if(i) {
  36.                                 if(n) {
  37.                                         text[n ++] = '\0' ;
  38.                                         fputs(text , fp)  ;
  39.                                 }
  40.                                 break                     ;
  41.                         }
  42.                         i ++                              ;
  43.                 }
  44.         }
  45.         fclose(fp)                                        ;
  46. }
复制代码

四个报错都是这一排的,删除这一排就是输入enter就会结束

四个报错都是这一排的,删除这一排就是输入enter就会结束
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-1-23 11:41:51 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2021-1-23 11:44 编辑

        看似简单的要求,实现起来还是挺麻烦的
  1. void BUILD_E(void)
  2. {
  3.         FILE * fp                                         ;
  4.         char name[10] , text[1024]                        ;
  5.         char way[10] = "e:\"                             ; // 设置路径为e 盘
  6.         char c[2]                                         ;
  7.         int i , n                                         ;
  8.         printf("请输入文件名称:")                        ;
  9.         scanf("%s" , name)                                ;
  10.         strcat(name , ".txt")                             ; // 给文件名加上后缀
  11.         strcat(way , name)                                ; // 添加路径
  12.         fp = fopen(way , "w")                             ;
  13.         printf("请输入内容:\n")                          ;
  14.         fflush(stdin)                                     ; // 清除 scanf() 遗留在键盘缓冲区内的换行符 '\n',否则,会给后续 getchar() 的文本输入带来麻烦
  15.         for(i = n = 0 ; ;) {
  16.                 c[i] = getchar()                          ;
  17.                 if(c[i] != '#') {
  18.                         if(c[i] == '\n') {
  19.                                 if(i) text[n ++] = c[0]   ;
  20.                                 text[n ++] = c[i]         ;
  21.                                 text[n ++] = '\0'         ;
  22.                                 fputs(text , fp)          ;
  23.                                 i = 0                     ;
  24.                                 n = 0                     ;
  25.                         } else {
  26.                                 if(i) {
  27.                                         text[n ++] = c[0] ;
  28.                                         text[n ++] = c[i] ;
  29.                                         i = 0             ;
  30.                                 } else {
  31.                                         text[n ++] = c[i] ;
  32.                                 }
  33.                         }
  34.                 } else {
  35.                         if(i) {
  36.                                 if(n) {
  37.                                         text[n ++] = '\0' ;
  38.                                         fputs(text , fp)  ;
  39.                                 }
  40.                                 break                     ;
  41.                         }
  42.                         i ++                              ;
  43.                 }
  44.         }
  45.         fclose(fp)                                        ;
  46. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-23 12:11:25 | 显示全部楼层
jackz007 发表于 2021-1-23 11:41
看似简单的要求,实现起来还是挺麻烦的

谢谢大佬!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-23 12:16:58 | 显示全部楼层
  1. void BUILD_E()
  2. {
  3.     FILE *fp;
  4.     char name[10],text[10000000];
  5.     char way[10] = "e:\";//设置路径为e盘
  6.     printf("请输入文件名称:\n");
  7.     scanf("%s",name);
  8.     strcat(name,".txt");//给文件名加上后缀
  9.     strcat(way,name);//添加路径
  10.     fp = fopen(way,"w");
  11.     printf("请输入内容:\n");
  12.     while(1)
  13.     {
  14.         scanf("%s",text);
  15.         //printf("%s",text);
  16.         if(!strcmp(text,"##"))//只有单纯输入##然后回车才会跳出循环结束输入,若输入的##后面还有其他内容,则不会结束输入
  17.             break;
  18.         else
  19.             fputs(text,fp);
  20.     }
  21.     fclose(fp);
  22. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-23 12:38:13 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-23 13:49:33 | 显示全部楼层
jackz007 发表于 2021-1-23 11:41
看似简单的要求,实现起来还是挺麻烦的

大佬,19到21步没看懂,能解释一下这几步的作用嘛
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-23 14:01:35 | 显示全部楼层
guhusf 发表于 2021-1-23 13:49
大佬,19到21步没看懂,能解释一下这几步的作用嘛

从16行开始说吧
如果输入的是##,那么就会满足if条件,执行 if 语句块,即执行break,跳出while循环;
如果输入的不是##,那么不满足if条件,执行else语句块,即执行fputs,将输入内容写入文件。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

大佬,我测试了你的程序,发现我输入的空格和换行都被忽略了。这是为什么呢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

哦哦因为用的是scanf
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-2 11:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表