2011-02-25 95 views
-2
/*                   
    Program to calculate trip and plan flights         
*/ 
#define TRIP 6 
#define NAMEMAX 40 
#define DEST 1 

#include <stdio.h> 
#include <string.h> 


int main(void) 
{ 
    int i, trip_num, row, col; 
    char travel_name[TRIP][DEST], 
    dest_in[1]; 


    printf("Please enter the number of trips:"); 
    scanf("%d", &trip_num); 

    while (trip_num > TRIP) 
    { 
     printf("Invalid number of trip. (Min of 3 trips and Max 6 trips).\n");\ 
    /*input number of trips*/ 
     printf("Please enter the number of trips:"); 
     scanf("%d", &trip_num); 
     if (trip_num < TRIP) 
     printf("Valid trip number. Please proceed to enter destination code.\ 
\n"); 
    } 

    for (i=0; i < trip_num ; i++) 

    { 
     printf("Please enter name of destination(Note: use _ to for spaces in \ 
name):\n"); 
     scanf("%s", &dest_in); 
     if (strlen(dest_in) < NAMEMAX) 
     strcpy(travel_name[i],dest_in); 
    /* else (strlen(dest_in) > NAMEMAX) */ 



    for (row = 0; row < trip_num; row++) 
    { 
     for (col=0; col < DEST; col++) 
     printf("Trip#:%d travel_name:%s \n", row+1, travel_name[row][col]); 
    } 

    return 0; 
} 

我試圖讓用戶把一個名稱爲字符串,並將其存儲如果名稱是40個字符以內,但它給了我一個分段錯誤字符串/分段故障

+1

> travel_name [i] [0] = dest_in [100]; < - 不知道這裏有什麼意圖,但是dest_in [100]不是有效的索引。 – Kevin 2011-02-25 20:10:25

回答

1

你的代碼有很多問題。

  1. scanf("%s", &dest_in)會讀一個字符串轉換爲dest_in這有可能溢出你的緩衝區,因爲沒有大小說明。考慮將其更改爲scanf("%99s", dest_in),以便您最多讀取99個字符,對於爲100(您的數組大小)的空終止符爲+1。另外,這裏不需要使用&運營商。

  2. travel_name[i][0]=dest_in[100];您正在訪問的字符超出了dest_in的範圍。您應該訪問的唯一索引是0.

  3. printf("Trip#:%d travel_name:%s \n", row+1, travel_name[row][col]);您的代碼表示您要打印一個字符串。 printf正在尋找指向字符數組的指針,但是travel_name[row][col]是單個字符。

  4. while (trip_num > TRIP)。您告訴用戶輸入3到6之間的數字,但不檢查輸入是否小於3.

+0

for the trip num我只使用了1,這樣我就可以檢查它是否加載(我知道它的馬虎)至於scanf當我的意圖只是掃描長度爲40的字符時,我重新編輯代碼,但由於某種原因,當我輸入任何名稱時,它只會打印第一個字母 – 2011-02-25 20:51:27

3

trip_num不初始化。目前還不清楚有多少次for循環執行這樣:

travel_name[i][0]=dest_in[100];

可以寫過去的數組的末尾。另外,該聲明的目的是什麼?我並沒有真正遵循它正在嘗試做的事情,所以我會從頭開始。

+0

忘記複製它想要在trip_num中掃描的代碼的頂部部分trip_num <6 – 2011-02-25 20:10:23

0

我認爲這是因爲 - >什麼是trip_num

這些類型的問題可以通過使用調試器輕鬆解決。我可以建議學習gdb(或cgdb),或者也許是一個內置調試功能的Eclipse CDT的直接IDE。