2017-03-03 9 views
-4
私は「DEVのCPP」を使用していると私は、関数1、exeファイル内のすべてのデータを入力した後、以下のコードを実行している間、私はC

なぜ私のCプログラムがクラッシュ

にいくつかのコードを書いている

だけクラッシュ。私は何が起こっている

を入力し、すべてのデータの広告プレスに入る終える前に

そこが示され、エラーされていませんか?

// hotel system *work in progress*// 
#include<stdio.h> 
#include<stdlib.h> 

struct book 
{ 
    int bookno[20]; 
    char travellername[20]; 
    char destination[20]; 
    char hotelname[20]; 
    char checkin[20]; 
    char checkout[20]; 
    int guestno[20]; 
    char type[20]; 
    float fee; 

}b; 


void add();//Add new booking 
void all(); //view all booking 
//void mod(); modify booking 
//void search(); search booking 
//void del(); delete booking 

void main() 
{ 

int choose; 
do{ 
printf("\n  *** Welcome to Hong Kong Hotek booking Record and Management  System 2017 ***\n"); 
printf("\n  *** This system is developed by CCIT4020 Class No.NL-?? Group No.?? ***"); 
printf("\n\n\n--<Basic functions>-- \n"); 

printf("\n1. Add New Hotel Booking Record(s): \n"); 
printf("\n2. Display All Hotel Booking Records: \n"); 
printf("\n3. Modify Hotel Booking Record(s): \n"); 
printf("\n4. Search Hotel Booking Record(s): \n"); 
printf("\n5. Delete Hotel Booking Record(s): \n"); 
printf("\n0. Quit: \n"); 
printf("\nWhat is your option (0-5)? "); 
scanf("%d",&choose);  

switch (choose) 
{ 
    case 1 : 
     add(); 
    break; 
    case 2: 
     all(); 
    break; 

    //case 3: 
    // mod(); 
    //break; 

    //case 4: 
    // search(); 
    //break; 

    //case 5: 
    // del(); 
    //break; 

    case 0: 
     exit(0); 
    break; 


    default: 
     printf("Invalid choice! Please enter again!"); 
    break; 
} 
}while(choose!=0); 

} 

void add() 
{ 

FILE *fp; 
struct book b; 
printf("Hotel Booking number: "); 
scanf("%s",b.bookno); 

printf("Name of Traveller: "); 
scanf("%s",b.travellername); 

printf("Destination: ");  
scanf("%s",b.destination); 

printf("Name of Hotel: "); 
scanf("%s",b.hotelname); 

printf("Check-in Schedule: "); 
scanf("%s",b.checkin); 

printf("Check-out Schedule: "); 
scanf("%s",b.checkout); 

printf("Number of Guests: "); 
scanf("%s",b.guestno); 

printf("Room Type: "); 
scanf("%s",b.type); 

printf("Total Fee: "); 
scanf("%s",b.fee); 

fp=fopen("data.txt","a"); 

if(fp == NULL) 
{ 
    printf("There are no data file! please create one!"); 
} 
else 
{ 
    fprintf(fp,"%s \n %s \n %s \n %s \n %s \n %s \n %s \n %s \n %s",b.bookno,b.travellername,b.destination,b.hotelname,b.checkin,b.checkout,b.guestno,b.type,b.fee); 
    printf("One Record Added!"); 
} 
    printf("\n"); 
fclose(fp); 
} 

void all() 
{ 
char choose; 
FILE *fp; 

fp = fopen("data.txt","r"); 
if(fp == NULL) 
{ 
    printf("There are no data file!"); 
    exit(1); 

} 
else 
{ 
    system("clear"); 
    while((choose = fgetc(fp)) != EOF) 
     printf("%c",choose); 

} 
fclose(fp); 
} 
+2

....バグがあります。それを見つける。 –

+1

ようこそスタックオーバーフロー!あなたは[___MCVE___](http://stackoverflow.com/help/mcve)の作成を気にしていますか? –

+1

入力は何ですか? –

答えて

0

あなたのコンパイラのメッセージを読む:

問題はここにある:

scanf("%s",b.fee); 

書式指定子が%sですが、b.feeがfloatです。

あなたはこの必要があります。そのような多くの問題がありそうあり

scanf("%f", &b.fee); 

を。あなた自身でそれらをチェックしてください。各scanf形式指定子は、変数と一致する必要があります。

+1

'scanf("%s "、b.bookno);はもう一つです。実際、アドレスなしで文字列としてスキャンされるすべての非文字列データは問題です。それは整数の_array_であることに言及していません... –

+1

は、 'fee'変数はアドレスを提供していない唯一のものであるので、クラッシュはそこから来なければならないと言います。そのコードは、まだ修正されても間違っています。 –

関連する問題