鱼C论坛

 找回密码
 立即注册
查看: 1047|回复: 4

[已解决]程序不继续运行

[复制链接]
发表于 2021-3-12 10:36:14 | 显示全部楼层 |阅读模式

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

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

x
  1. void StuInput()
  2. {
  3.    
  4.     char choice;
  5.     FILE *fp;
  6.     fp = fopen("C:\\Users\\yyp\\Desktop\\text1.txt","a+");
  7.     if(fp == NULL)
  8.     {
  9.         printf("Error!\n");
  10.         exit(0);
  11.     }
  12.    
  13.     printf("***********Student Record System***********\n");
  14.     printf("Please input num: ");
  15.     scanf("%d",&stu.num);
  16.     printf("Please input name: ");
  17.     scanf("%s",stu.name);
  18.     printf("Please input age: ");
  19.     scanf("%d",stu.age);
  20.     fprintf(fp,"%d %s %d\n",stu.num,stu.name,stu.age);
  21.     fclose(fp);
  22.    
  23.     printf("Continue to input? y or n ");
  24.     fflush(stdin);
  25.     scanf("%c",&choice);
  26.     if(choice == 'y')
  27.     {
  28.         StuInput();
  29.     }

  30. }
复制代码


输入完第一轮数据之后,就卡壳了

不出现这个printf("Continue to input? y or n ");然后就直接结束
最佳答案
2021-3-12 11:13:59
本帖最后由 jackz007 于 2021-3-12 11:48 编辑

        此句有错
  1.     scanf("%d",stu.age);
复制代码

        得改成这样
  1.     scanf("%d" , & stu . age) ;
复制代码

        没必要用递归
  1. void StuInput()
  2. {
  3. . . . . . .
  4.     if(choice == 'y')
  5.     {
  6.         StuInput();    // 这是递归吗?
  7.     }
  8. }
复制代码


        这是我修改的代码
  1. #include <stdio.h>

  2. void StuInput(char fn[])
  3. {
  4.         char name[64]                                                             ;
  5.         int num , age                                                             ;
  6.         FILE * fp                                                                 ;
  7.         if((fp = fopen(fn , "a+"))) {
  8.                 printf("\n")                                                      ;
  9.                 printf("***********Student Record System***********\n")           ;
  10.                 for(;;) {
  11.                         printf("Please input num name age : ")                    ;
  12.                         scanf("%d%s%d" , & num , name , & age)                    ;
  13.                         if(num > 0) fprintf(fp , "%d %s %d\n" , num , name , age) ;
  14.                         else break                                                ;
  15.                 }
  16.                 fclose(fp)                                                        ;
  17.         } else {
  18.                 fprintf(stderr , "\n")                                            ;
  19.                 fprintf(stderr , "Can't open input file : %s\n" , fn)             ;
  20.                 fprintf(stderr , "\n")                                            ;
  21.         }
  22. }

  23. void StuPrint(char fn[])
  24. {
  25.         char name[64]                                                             ;
  26.         int num , age                                                             ;
  27.         FILE * fp                                                                 ;
  28.         if((fp = fopen(fn , "r"))) {
  29.                 printf("\n")                                                      ;
  30.                 printf("***********[ %s ]***********\n" , fn)                     ;
  31.                 fscanf(fp , "%d %s %d" , & num , name , & age)                    ;
  32.                 for(; ! feof(fp) ;) {
  33.                         printf("%d %s %d\n" , num , name , age)                   ;
  34.                         fscanf(fp , "%d %s %d" , & num , name , & age)            ;
  35.                 }
  36.                 fclose(fp)                                                        ;
  37.         } else {
  38.                 fprintf(stderr , "\n")                                            ;
  39.                 fprintf(stderr , "Can't open input file : %s\n" , fn)             ;
  40.                 fprintf(stderr , "\n")                                            ;
  41.         }
  42. }

  43. int main(void)
  44. {
  45.         char fn[] = "text1.txt"                                                   ;
  46.         StuInput(fn)                                                              ;
  47.         StuPrint(fn)                                                              ;
  48. }
复制代码

       编译、运行实况
  1. D:\0002.Exercise\C>g++ -o x x.c

  2. D:\0002.Exercise\C>x

  3. ***********Student Record System***********
  4. Please input num name age : 100 abc 18
  5. Please input num name age : 101 bcd 19
  6. Please input num name age : 102 cde 20
  7. Please input num name age : 103 def 21
  8. Please input num name age : 0 0 0

  9. ***********[ text1.txt ]***********
  10. 100 abc 18
  11. 101 bcd 19
  12. 102 cde 20
  13. 103 def 21

  14. D:\0002.Exercise\C>
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-3-12 10:38:51 | 显示全部楼层
是不是没有吸收掉前面的‘\n’
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-12 11:13:59 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2021-3-12 11:48 编辑

        此句有错
  1.     scanf("%d",stu.age);
复制代码

        得改成这样
  1.     scanf("%d" , & stu . age) ;
复制代码

        没必要用递归
  1. void StuInput()
  2. {
  3. . . . . . .
  4.     if(choice == 'y')
  5.     {
  6.         StuInput();    // 这是递归吗?
  7.     }
  8. }
复制代码


        这是我修改的代码
  1. #include <stdio.h>

  2. void StuInput(char fn[])
  3. {
  4.         char name[64]                                                             ;
  5.         int num , age                                                             ;
  6.         FILE * fp                                                                 ;
  7.         if((fp = fopen(fn , "a+"))) {
  8.                 printf("\n")                                                      ;
  9.                 printf("***********Student Record System***********\n")           ;
  10.                 for(;;) {
  11.                         printf("Please input num name age : ")                    ;
  12.                         scanf("%d%s%d" , & num , name , & age)                    ;
  13.                         if(num > 0) fprintf(fp , "%d %s %d\n" , num , name , age) ;
  14.                         else break                                                ;
  15.                 }
  16.                 fclose(fp)                                                        ;
  17.         } else {
  18.                 fprintf(stderr , "\n")                                            ;
  19.                 fprintf(stderr , "Can't open input file : %s\n" , fn)             ;
  20.                 fprintf(stderr , "\n")                                            ;
  21.         }
  22. }

  23. void StuPrint(char fn[])
  24. {
  25.         char name[64]                                                             ;
  26.         int num , age                                                             ;
  27.         FILE * fp                                                                 ;
  28.         if((fp = fopen(fn , "r"))) {
  29.                 printf("\n")                                                      ;
  30.                 printf("***********[ %s ]***********\n" , fn)                     ;
  31.                 fscanf(fp , "%d %s %d" , & num , name , & age)                    ;
  32.                 for(; ! feof(fp) ;) {
  33.                         printf("%d %s %d\n" , num , name , age)                   ;
  34.                         fscanf(fp , "%d %s %d" , & num , name , & age)            ;
  35.                 }
  36.                 fclose(fp)                                                        ;
  37.         } else {
  38.                 fprintf(stderr , "\n")                                            ;
  39.                 fprintf(stderr , "Can't open input file : %s\n" , fn)             ;
  40.                 fprintf(stderr , "\n")                                            ;
  41.         }
  42. }

  43. int main(void)
  44. {
  45.         char fn[] = "text1.txt"                                                   ;
  46.         StuInput(fn)                                                              ;
  47.         StuPrint(fn)                                                              ;
  48. }
复制代码

       编译、运行实况
  1. D:\0002.Exercise\C>g++ -o x x.c

  2. D:\0002.Exercise\C>x

  3. ***********Student Record System***********
  4. Please input num name age : 100 abc 18
  5. Please input num name age : 101 bcd 19
  6. Please input num name age : 102 cde 20
  7. Please input num name age : 103 def 21
  8. Please input num name age : 0 0 0

  9. ***********[ text1.txt ]***********
  10. 100 abc 18
  11. 101 bcd 19
  12. 102 cde 20
  13. 103 def 21

  14. D:\0002.Exercise\C>
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-12 11:49:19 | 显示全部楼层
jackz007 发表于 2021-3-12 11:13
此句有错

        得改成这样

所以说fscanf遇到\n就会结束执行并且继续执行程序下面的语句吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-12 11:53:04 | 显示全部楼层
学编程的盆子 发表于 2021-3-12 11:49
所以说fscanf遇到\n就会结束执行并且继续执行程序下面的语句吗

        是的,这一句要求文本文件中每一行的行末必须是换行符 '\n',否则,fscanf() 就会被卡住。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-21 00:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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