我目前正在编写一个程序,将一个文件的文本复制或附加到另一个文件中。当提示用户是否要覆盖或追加文件时,我的问题就出现了,我们都跳过了scanf()和getchar()。我尝试过使用getchar()和scanf()以及fflush(stdin)的多种组合,并确保我打开的所有文件都很接近,但我仍然无法输入选择。
包含第一个提示的代码的特定部分在这里。
`/****************PROMPT FOR OVERWRITE****************/
printf("Would you like to overwrite the Destination File?\n");
printf("1=NO,2=YES=");
scanf("%d", &overwriteAnswer);
if(overwriteAnswer == 2)
{
`
这个scanf()或者当我使用getChar()时,它只是被跳过,并且每次执行代码时通常都会填充不同的负数。
完整代码如下
if((infile = open(argv[1], O_RDONLY)) == 0)
{
/****************INPUT FILE OPENED****************/
printf("%s open\n",argv[1]);
if ((outfile = access(argv[1], F_OK)) == 0 )
{
/****************PROMPT FOR OVERWRITE****************/
printf("Would you like to overwrite the Destination File?\n");
printf("1=NO,2=YES=");
scanf("%d", &overwriteAnswer);
if(overwriteAnswer == 2)
{
printf("Overwriting Destination File\n");
}
非常感谢任何帮助或建议。
答案 0 :(得分:1)
我不明白你为什么不这样使用fflush:
printf("\nWould you like to append the Destination File?\n");
printf("1=NO,2=YES=");
fflush(stdin);
scanf("%d", &appendAnswer);
修改强>
如果fflush(stdin)
不起作用,请尝试强制scanf
按以下方式读取数字:
// additional variables
char ch; // just a char to read from stream
int wasNumber; // flag of successful scanf execution
do{
wasNumber = 0;
// ask for input
printf("\nWould you like to append the Destination File?\n");
printf("1=NO, 2=YES : ");
// read mumber
wasNumber = scanf("%d", &appendAnswer);
// clean the input bufer if it has not number
if( wasNumber == 0 )
{
while( getchar() != '\n' ); // read till the end of line
}
}while(wasNumber != 1 || appendAnswer < 1 || appendAnswer > 2);