2013-03-23 106 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