C-->scanf 求助
各位大神们帮看看我的操作需要输入2个参数 一个int 一个字符串,
printf ( "请选择打开文件的方式: " ) ;
scanf( "%d", &num ) ;
printf ( "请输入需要读/写的文件名称: " ) ;
scanf( "%s", filename ) ;
但是在实际操作的时候字符串总是需要输入2次.
你有两个参数,不输入两次输几次? catch 发表于 2014-7-11 13:33
你有两个参数,不输入两次输几次?
sorry 估计我没描述清楚,我说的是输入了文件名后 回车, 还需要再输入一次文件名才行. linuxyz 发表于 2014-7-11 13:58
sorry 估计我没描述清楚,我说的是输入了文件名后 回车, 还需要再输入一次文件名才行.
麻烦提供完整代码? 下面没有代码了? linuxyz 发表于 2014-7-11 13:58
sorry 估计我没描述清楚,我说的是输入了文件名后 回车, 还需要再输入一次文件名才行.
#include <stdio.h>
int fgetc_test () ;
char* chooseModel ( int ) ;
int main ( void )
{
intnum ;
char filename ;
printf ( "1、(只读)为输入打开一个文本文件\n" ) ;
printf ( "2、(只写)为输出打开一个文本文件\n" ) ;
printf ( "3、(追加)向文本文件末尾增加数据\n" ) ;
printf ( "4、(只读)为输入打开一个二进制文件\n" ) ;
printf ( "5、(只写)为输出打开一个二进制文件\n" ) ;
printf ( "6、(追加)向二进制文件末尾追加数据\n" ) ;
printf ( "7、(读写)为读/写打开一个文本文件\n" ) ;
printf ( "8、(读写)为读/写建立一个新的文本文件\n" ) ;
printf ( "9、(读写)为读/写打开一个文本文件\n" ) ;
printf ( "10、(读写)为读/写打开一个二进制文件\n" ) ;
printf ( "11、(读写)为读/写建立一个新的二进制文件\n" ) ;
printf ( "12、(读写)为读/写打开一个二进制文件\n\n" ) ;
printf ( "请选择打开文件的方式: " ) ;
scanf( "%d", &num ) ;
printf ( "请输入需要读/写的文件名称: " ) ;
scanf( "%s", filename ) ;
fgetc_test ( filename, chooseModel ( num ) ) ;
return 0 ;
}
int fgetc_test ( char filename, char model )
{
FILE * fp ;
char ch ;
scanf( "%s", filename ) ;
if ( !( fp = fopen ( filename, model) ) )
{
printf ( "Can not open the file!\n" ) ;
return 0 ;
}
while ( ch != EOF )
{
ch = fgetc ( fp ) ;
putchar ( ch ) ;
}
fclose ( fp ) ;
return 0 ;
}
char* chooseModel ( int num )
{
switch ( num )
{
case 1:return "r" ;
case 2:return "w" ;
case 3:return "a" ;
case 4:return "rb" ;
case 5:return "wb" ;
case 6:return "ab" ;
case 7:return "rt+" ;
case 8:return "wt+" ;
case 9:return "at+" ;
case 10: return "rb+" ;
case 11: return "wb+" ;
case 12: return "ab+" ;
default: return "r" ;
}
return "r" ;
}
新手啊 麻烦了 我知道哪问题了 麻烦大神们了..
不好意思 好低级的错误. 我在fgetc_test方法中有个scanf没删除 唉. 在fgetc_test中你又重新要求输入了一次。scanf( "%s", filename ) ; :titter:就是,还是小鱼厉害,不发完整的还看不出来, 疯狂战圣 发表于 2014-7-11 15:35
就是,还是小鱼厉害,不发完整的还看不出来,
是是. 一直看都没看出来什么问题, 让我发代码的时候 发完我自己立马就看出来了 娃哈哈:lol: 主要问题出现在scanf() 函数中,获取第一个函数,1'\n' ,然后获取int 类型数据 1 ,然后'\n' 留在缓存区buffer 中,后输入名字。然后第二次scanf("%s",fileneme) ,filename获取 字符,实际上获取到的是\n’,表示filename 没有任何东西,然后丢弃掉,在输入一次才能 filenane 才能获得文件名,有问题请指出,共同进步。。
页:
[1]