-1

Cクラスのために別の演習があります。コードはクラッシュしませんが、期待どおりに機能しません。明らかに、私は見つけられない間違いを犯しました。割り当ては次のようになります。ユーザーは2文字のc1とc2と整数nを入力し、動的に作成して次のようなn文字の文字列を返す関数を作成する必要があります:c1c2c1c2c1c2など。例:c1=aおよびc2= sおよびn=4文字列は次のとおりです。asas

ただし、作成した配列にはc1とc2は含まれていませんが、ASCIIテーブルのランダムな文字がいくつか含まれています。プラスここ:

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

画面の出力は次のようになります。Ohe文字列は次のとおりです。I(文字列の挿入は次のとおりです:s-sが何であれ-).exeファイルからの写真のリンクは次のとおりです。

ここに画像の説明を入力してください

#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");
}

前もって感謝します!

4

2 に答える 2

6

;削除します

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

そこには属していません。

于 2013-03-23T15:22:45.387 に答える
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;
 } 
于 2013-03-23T15:23:55.667 に答える