2014-11-21 13 views
0

這就是items.txt包含匹配值輸入:似乎無法在一個文本文件

275,Fresh Fish,12.34,0 
386,Soft kleenex,45.67,1 
240,Ultra Tide,24.34,1 
916,Red Apples,123.45,0 
385,Magic Broom,456.78,1 
495,Liquid Soap,546.02,1 
316,Chocolate Cookies,78.34,1 
355,Organic Milk,24.34,0 
846,Dark Chocolate,123.45,1 
359,Organic Banana,99.99,0 

我怎麼能退的文件時,用戶輸入「Y」?如果我第一次輸入正確的值,它會起作用。

#include <stdio.h> 
#define TAX (0.13) 
void keybFlush(){ 
    while(getchar() != '\n'); 
} 
int getInt(){ 
    int val; 
    char nl = 'x'; 
    while (nl != '\n'){ 
     scanf("%d%c", &val, &nl); 
     if (nl != '\n'){ 
     keybFlush(); 
     printf("Invalid Integer, please try again: "); 
     } 
    } 
    return val; 
} 
int yes(){ 
    char ch = 'x'; 
    int res; 
    do{ 
     ch = getchar(); 
     res = (ch == 'Y' || ch == 'y'); 
     keybFlush(); 
    } while (ch != 'y' && ch != 'Y' && ch != 'n' && ch != 'N' && printf("Only (Y)es or (N)o are acceptable: ")); 
    return res; 
} 
int main(){ 
    int upc, userUpc, found = 0; 
    double price; 
    int isTaxed, i; 
    char item[21], ch, x, y; 
    FILE* fptr = fopen("items.txt", "r"); 
    if (fptr){ 
    do { 
    userUpc=getInt(); 
printf(" UPC | Name    | Price | Tax | Total\n" 
     " -----+--------------------+-----------+---------+-----------\n"); 
    printf("its : %d\n", userUpc); 
    while (!feof(fptr)){ 
     fscanf(fptr, "%d,%[^,],%lf,%d", &upc, item, &price, &isTaxed); 
     if (upc == userUpc){ 
     if(!feof(fptr)){ 
      printf("%-6d|%-20s|%11.2lf|", upc, item, price); 
      if (isTaxed) 
       printf("%9.2lf|%11.2lf\n", price * TAX, price * (1+TAX)); 
      else 
       printf("%9.2lf|%11.2lf\n", 0.0, price); 
      found = 1; 
     } 
     } 
    } 
    if (!found){ 
     printf("Can't find any matched records\n"); 
    } 
    printf("Do you want to continue: "); 
    i=yes(); // if yes, rewind the file 
    } while (!userUpc || (i == 1)); 
    fclose(fptr); 

    } 
    else{ 
     printf("could not open the file\n"); 
    } 
    return 0; 
} 

如果我輸入「y」繼續並且正確的值,它似乎沒有正確輸出。

+0

嘗試倒帶(FPTR) – cup 2014-11-21 16:20:35

+0

'I =是();' - >'if(i = yes())rewind(fptr);' – BLUEPIXY 2014-11-21 17:22:48

+0

@BLUEPIXY正在使用最初用於磁帶文件的功能。更通用的方法是使用fseek()函數。 – user3629249 2014-11-21 19:30:35

回答