鱼C论坛

 找回密码
 立即注册
查看: 2628|回复: 11

C-->scanf 求助

[复制链接]
发表于 2014-7-11 12:58:32 | 显示全部楼层 |阅读模式

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

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

x
各位大神们帮看看
我的操作需要输入2个参数 一个int 一个字符串,
        printf ( "请选择打开文件的方式: " ) ;
        scanf  ( "%d", &num ) ;
        printf ( "请输入需要读/写的文件名称: " ) ;
        scanf  ( "%s", filename ) ;

但是在实际操作的时候字符串总是需要输入2次.

代码截图

代码截图
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-7-11 13:33:47 | 显示全部楼层
你有两个参数,不输入两次输几次?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-11 13:58:56 | 显示全部楼层
catch 发表于 2014-7-11 13:33
你有两个参数,不输入两次输几次?

sorry 估计我没描述清楚,我说的是输入了文件名后 回车, 还需要再输入一次文件名才行.

点评

麻烦提供完整代码?  详情 回复 发表于 2014-7-11 14:00
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-7-11 14:00:09 | 显示全部楼层
linuxyz 发表于 2014-7-11 13:58
sorry 估计我没描述清楚,我说的是输入了文件名后 回车, 还需要再输入一次文件名才行.

麻烦提供完整代码?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-7-11 14:05:03 | 显示全部楼层
下面没有代码了?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-11 14:54:12 | 显示全部楼层
linuxyz 发表于 2014-7-11 13:58
sorry 估计我没描述清楚,我说的是输入了文件名后 回车, 还需要再输入一次文件名才行.
  1. #include <stdio.h>

  2. int fgetc_test () ;
  3. char* chooseModel ( int ) ;

  4. int main ( void )
  5. {
  6.         int  num ;
  7.         char filename[20] ;
  8.         printf ( "1、(只读)为输入打开一个文本文件\n" ) ;
  9.         printf ( "2、(只写)为输出打开一个文本文件\n" ) ;
  10.         printf ( "3、(追加)向文本文件末尾增加数据\n" ) ;
  11.         printf ( "4、(只读)为输入打开一个二进制文件\n" ) ;
  12.         printf ( "5、(只写)为输出打开一个二进制文件\n" ) ;
  13.         printf ( "6、(追加)向二进制文件末尾追加数据\n" ) ;
  14.         printf ( "7、(读写)为读/写打开一个文本文件\n" ) ;
  15.         printf ( "8、(读写)为读/写建立一个新的文本文件\n" ) ;
  16.         printf ( "9、(读写)为读/写打开一个文本文件\n" ) ;
  17.         printf ( "10、(读写)为读/写打开一个二进制文件\n" ) ;
  18.         printf ( "11、(读写)为读/写建立一个新的二进制文件\n" ) ;
  19.         printf ( "12、(读写)为读/写打开一个二进制文件\n\n" ) ;
  20.         printf ( "请选择打开文件的方式: " ) ;
  21.         scanf  ( "%d", &num ) ;
  22.         printf ( "请输入需要读/写的文件名称: " ) ;
  23.         scanf  ( "%s", filename ) ;
  24.        
  25.         fgetc_test ( filename, chooseModel ( num ) ) ;
  26.         return 0 ;
  27. }

  28. int fgetc_test ( char filename[20], char model[20] )
  29. {
  30.         FILE * fp ;
  31.         char   ch ;
  32.        
  33.         scanf  ( "%s", filename ) ;
  34.        
  35.         if ( !( fp = fopen ( filename, model) ) )
  36.         {
  37.                 printf ( "Can not open the file!\n" ) ;
  38.                 return 0 ;
  39.         }
  40.         while ( ch != EOF )
  41.         {
  42.                 ch = fgetc ( fp ) ;
  43.                 putchar ( ch ) ;
  44.         }
  45.         fclose ( fp ) ;
  46.         return 0 ;
  47. }

  48. char* chooseModel ( int num )
  49. {
  50.         switch ( num )
  51.         {
  52.                 case 1:  return "r" ;
  53.                 case 2:  return "w" ;
  54.                 case 3:  return "a" ;
  55.                 case 4:  return "rb" ;
  56.                 case 5:  return "wb" ;
  57.                 case 6:  return "ab" ;
  58.                 case 7:  return "rt+" ;
  59.                 case 8:  return "wt+" ;
  60.                 case 9:  return "at+" ;
  61.                 case 10: return "rb+" ;
  62.                 case 11: return "wb+" ;
  63.                 case 12: return "ab+" ;
  64.                 default: return "r" ;
  65.         }
  66.         return "r" ;
  67. }
复制代码


新手啊 麻烦了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-11 14:57:29 | 显示全部楼层
我知道哪问题了 麻烦大神们了..
不好意思 好低级的错误.
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-11 14:58:45 | 显示全部楼层
我在fgetc_test方法中有个scanf没删除 唉.
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-7-11 15:03:32 | 显示全部楼层
在fgetc_test中你又重新要求输入了一次。scanf  ( "%s", filename ) ;
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-7-11 15:35:15 | 显示全部楼层
:titter:就是,还是小鱼厉害,不发完整的还看不出来,
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-11 17:27:20 | 显示全部楼层
疯狂战圣 发表于 2014-7-11 15:35
就是,还是小鱼厉害,不发完整的还看不出来,

是是. 一直看都没看出来什么问题, 让我发代码的时候 发完我自己立马就看出来了 娃哈哈:lol:
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-7-12 10:17:46 | 显示全部楼层
主要问题出现在scanf() 函数中,获取第一个函数,1'\n' ,然后获取int 类型数据 1 ,然后'\n' 留在缓存区buffer 中,后输入名字。然后第二次scanf("%s",fileneme) ,filename  获取 字符,实际上获取到的是\n’,表示filename 没有任何东西,然后丢弃掉,在输入一次才能 filenane 才能获得文件名,有问题请指出,共同进步。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-10 14:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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