2014-07-22 33 views
-2

我一直在嘗試編寫用戶在命令shell中給出的單詞,但出於某種原因,我的程序在read()函數後立即退出,因此main():「in main2 \ n」中的文本是從來沒有寫過。我一直試圖找到我的問題約一個小時,似乎無法找到它。爲什麼我的寫入方法未初始化?

# include <stdio.h> 

void write_zin(const char* zin,int length_zin){ 
    const char * runner =zin; 
    printf("out of loop\n"); 
    while(runner!=(runner+length_zin)){ 
      printf("%c",*runner); 
      runner++; 
    } 
} 

void read(char* zin,int NUMBER_LETTERS,int NUMBER_WORDS){ 
    int i ; 
    char woord[NUMBER_LETTERS+1]; 
    zin[0]='\0'; 
    for(i =0;i<NUMBER_WORDS;i++){ 
     printf("Give a word with %i letters\n",NUMBER_LETTERS); 
     scanf("%s",woord); 
     strcat(zin,woord); 
     strcat(zin,'\0'); 
    } 
    strcat(zin,'\0'); 
} 


int main(){ 
    const int NUMBER_LETTERS = 5; 
    const int NUMBER_WORDS = 2; 
    char zin[(NUMBER_LETTERS+1)*NUMBER_WORDS]; 
    printf("in main 1\n"); 
    read(zin,NUMBER_LETTERS,NUMBER_WORDS); 
    printf("in main 2\n"); 
    write_zin(zin,(NUMBER_LETTERS+1)*NUMBER_WORDS); 
    printf("in main3\n"); 

    return 0; 
} 
+0

您是否嘗試過使用調試器? –

+2

'strcat(zin,'\ 0');' - 你期望這樣做? – ecatmur

+0

@米奇,我還沒有想到如何使用調試器在學校。 @ ecatmur,在每個單詞後面加一個空格 – BURNS

回答

2

有代碼中的幾個錯誤:

  1. 功能void read(char* zin,int NUMBER_LETTERS,int NUMBER_WORDS)

如果您連接通過'\0'你將最終僅具有一個字符串分隔的話,因爲每個字符串函數停在第一個'\0',不會處理更多的字符。

void read(char* zin,int NUMBER_LETTERS,int NUMBER_WORDS){ 
    int i ; 
    char woord[NUMBER_LETTERS+1]; 
    for(i =0;i<NUMBER_WORDS;i++){ 
     printf("Give a word with %i letters\n",NUMBER_LETTERS); 
     scanf("%s",woord); 
     strcat(zin,woord); 
    } 
} 

2.功能void write_zin(const char* zin,int length_zin) 你永遠不能改變內部循環的狀態:所以,如果你想之間的字符串使用其他特殊字符作爲'\n'標記分離的最終功能將不能使用strcat(zin,'\0'); 循環。這就是你在做的事情,因爲跑步者總是在循環內部改變,另外它也是你的條件的一部分。

while(runner!=(runner+length_zin)){ 
     printf("%c",*runner); 
     runner++; 
} 

最終的功能是:

void write_zin(const char* zin,int length_zin){ 
const char * runner =zin; 
printf("out of loop"); 
    while(*runner){ 
     printf("'%c'",*runner); 
     runner++; 
} 

}

相關問題