2014-05-06 26 views
0

我一直在製作一個程序,從用戶接收標題電影,是時候了。該程序使用包含char title [20]和char time [20]數組的輸入字符串的結構體電影,然後定義2個指針數組,將結構體中掃描的字符串插入到它們中(指針數組)。掃描和複製處於一個while循環,當-1輸入到電影標題中時會停止。 直到現在它工作正常,但是當我退出循環時,我插入-1並打印電影名稱和時間輸出結果全部爲電影片名-1和電影時間的最後一個時間。如果有什麼不清楚的問我,請幫忙。這是代碼:電影定時顯示程序

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

struct movie { 
    char title[20]; 
    char time[20]; 
}; 

char *movieTitle[20],*movieTime[20]; 
int movieCount=0; 

int main() { 

    struct movie aMovie={"Hello","Hello"}; 

    puts("*****Welcome to VOX cinemas*****"); 
    puts("Please enter the movie title (enter -1 to end):"); 
    scanf("%s" ,&aMovie.title); 

    while(aMovie.title[0]!='-'||aMovie.title[1]!='1') { 
     puts("Please enter the movie's time"); 
     scanf("%s" , &aMovie.time); 
     movieTitle[movieCount]=aMovie.title; 
     movieTime[movieCount]=aMovie.time; 
     printf("movieTitle[%d]=%s\n",movieCount,movieTitle[movieCount]); //a checking print 
     printf("movieTime[%d]=%s\n",movieCount,movieTime[movieCount]); //a checking print 
     movieCount++; 
     puts("Please enter the movie title (enter -1 to end):"); 
     scanf("%s", &aMovie.title); 
    } 

    printf("%s",movieTitle[0]); 
    int numberOfMovies=movieCount; 
    puts("********************************\n\n\nMovie Title\t\tMovie Time"); 

    for(movieCount=0;movieCount!=numberOfMovies;movieCount++) { 
     printf("%s\t\t\t%s\n", movieTitle[movieCount],movieTime[movieCount]); 
    } 

    while(1); 
} 

回答

2

您需要閱讀C和字符串操作。

下面的代碼行:

 
movieTitle[movieCount]=aMovie.title; 
movieTime[movieCount]=aMovie.time; 

你覺得他們這樣做?複製字符串?不,他們將指針複製到字符串。然後你回到你的循環並覆蓋這些字符串(以及任何指向它們的點將返回新的東西)。

試試這個:

 
movieTitle[movieCount]=strdup(aMovie.title); 
movieTime[movieCount]=strdup(aMovie.time); 

,其分配新的內存,並在其中存儲您的字符串的副本。你應該在內存分配和泄漏,以及讀了,但對你貼什麼,這就夠了也許是好事:d

編輯:

一些更多的提示:

錯誤:scanf("%s", &aMovie.title); 正確: scanf("%s", aMovie.title);

錯誤:scanf("%s", &aMovie.time); 正確:scanf("%s", aMovie.time);

這是因爲char s[20]已經是一個指向預分配的20字節字符串的指針。 s是char *&s將是一個指向指針的指針。它將有類型char **

+0

哥們你真了不起! :D看起來像是在理解字符串如何被複制時遇到問題:S可以簡單地向我解釋一下嗎? – user3609643

+0

yeahh好吧我明白了^^感謝很多隊友我欣賞它 – user3609643

+0

隨時點擊綠色標記接受我的答案,如果它回答你的問題:) –