2015-02-03 6 views
1

현재 한 파일의 텍스트를 다른 파일에 복사하거나 추가하는 프로그램을 작성하고 있습니다. 내 문제는 사용자가 파일을 덮어 쓰거나 추가 할 것인지 묻는 메시지가 나타나면 scanf() 및 getchar()을 건너 뛰고 두 번 건너 뛰는 경우 발생합니다. fflush (stdin)와 함께 getchar() 및 scanf()를 여러 가지 조합으로 사용하고 내가 연 파일이 모두 닫혔는지 확인했지만 여전히 선택 항목을 입력 할 수 없습니다.getchar() 및 scanf()가 C에서 건너 뛰었습니다.

첫 번째 프롬프트를 포함하는 특정 부분은 여기에 있습니다. I)이 (getchar가 사용되는 경우

`/****************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와() 또는, 단지 스킵되고 보통 다른 음수로 코드가 실행될 때마다 채워진다.

전체 코드는

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"); 
      } 

어떤 도움이나 조언이 크게 감사합니다 다음과 같습니다. 당신이 그렇게 FFLUSH 사용하지 않는 이유

+0

나는 실제로이 모든 것을 읽었으며 그들이 말하는 것을 구현하려고 시도했다. 불행히도 그것은 ' 나는 전혀 도움이되지 못했다. – user3006826

+0

불행히도 여전히 scanf()를 건너 뛰었습니다. – user3006826

+0

아니요. 실행은 ./a.out [sourcefile] [destinationfile]입니다. – user3006826

답변

1

이해가 안 :

   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); 
+0

나는 그것이 나를 위해 아무것도 해결하지 못했다. 방금 다시 확인해 보았습니다. – user3006826

+0

또한 코드에는 두 개의 scanf()가 있으며 첫 번째 것도 건너 뜁니다. – user3006826

+0

debfuger를 시도하여 프로그램이 scanf에 도달 할 수 있습니까? – VolAnd