2013-03-23 93 views
-1

我還有一個練習C我的課。該代碼不會崩潰,但不能按預期工作。顯然我犯了一個我找不到的錯誤。 作業如下: 用戶輸入兩個字符c1和c2以及整數n,您必須創建一個動態創建的函數並返回一個字符串,其中包含n個字符,如下所示:c1c2c1c2c1c2等 例如: c1 = a和c2 = s和n = 4字符串是:asas這個C代碼有什麼問題? (不按預期工作)

但是,我創建的數組不包含c1和c2,但是來自ASCII表中的一些隨機字符。加上這裏:

printf("\nThe string is: %s\n",s); 

在屏幕的輸出是這樣的:大江字符串是:我(字符串的insted的是:S-無論小號是 - ) 這裏有一張照片,從該.exe文件的鏈接:

enter image description here

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

char* alternate(char c1,char c2,int n) 
{ 
    int i; 
    char *s; 
    s=(char*)malloc((n+1)*sizeof(char)); 
    if(s==NULL) 
    { 
     puts("Could not allocate memory!"); 
     exit(1); 
    } 
    for(i=0;i<n;i++); 
    { 
     if(i%2==0) 
      s[i]=c1; 
     else 
      s[i]=c2; 
    } 
    s[i]='\0'; 
    return s; 
} 

main() 
{ 
    char c1,c2,*s; 
    int n; 
    puts("Give two characters: "); 
    scanf("%c %c",&c1,&c2); 
    fflush(stdin); 
    puts("Give an integer: "); 
    scanf("%d",&n); 
    s=alternate(c1,c2,n); 
    printf("\nThe string is: %s\n",s); 
    free(s); 
    system("pause"); 
} 

預先感謝您!

+0

你試過在一個調試器中運行呢?逐步運行以檢查所有工作是否正常。你也應該檢查'scanf'的返回值來看它是否成功。 – 2013-03-23 15:20:46

+0

您不需要在C程序中投射'malloc()'的返回值。 'sizeof(char)'是'1'。 – 2013-03-23 15:21:04

+0

@CarlNorum感謝您的提示!我們的教授告訴我們這樣做(類型轉換),以使代碼與C和C++編譯器兼容。 – syfantid 2013-03-23 15:47:20

回答

5

刪除分號旁邊的for循環語句:

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

我刪除了分號&想你的代碼&它打印文本的預期。

for循環旁邊的分號使它成爲一個空循環,而後面的語句只是一些作用域的賦值。也就是說,

for(i=0;i<n;i++); 
    { 
     if(i%2==0) 
      s[i]=c1; 
     else 
      s[i]=c2; 
    } 

是相同

for(i=0;i<n;i++) 
{ 

} 

{ 
    if(i%2==0) 
     s[i]=c1; 
    else 
     s[i]=c2; 
} 
6

刪除;

for(i=0;i<n;i++); 
{ 

它不屬於那裏。

+0

我上個學期犯了這個錯誤大概有一千次,我一直在做!我已經多次查看了代碼,但我沒有注意到!謝謝! – syfantid 2013-03-23 15:24:55