-1
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

void clearscreen()
{
    system("cls");
}

int main()
{
    int b1,b,c;
    char data[20]; 
    int number,a;

    printf("How many data do you want to store  ");
    scanf("%d",&number);

    for(a=1;a<=number;a++)
    {
        printf("Input your data No_%d:       ",a);
        scanf("%s",&data[a]);
    }     
    return 0;
}

私の質問はこれです:データを保存した後、どのように表示しますか?たとえば、2つのデータを保存します。nxtは、これら2つのデータを表示したいです。誰かが私にサンプルコードを教えてもらえますか?

4

3 に答える 3

1

現在のコードはコンパイルされますが、根本的に間違っていcharます。文字列全体ではなく、単一の文字を格納できる型です。したがって、&data[a]以前に使用された文字列の部分文字列を指し、後続の各文字列は以前に入力された文字列の部分を上書きします。

残念ながら、C での文字列操作はそれよりもはるかに複雑です。タスクを正しく実行するには、2D 配列またはポインターの配列が必要です。

char *data[20];
...
for(a=1;a<=number;a++)
{
    char buf[101];
    printf("Input your data No_%d:       ",a);
    scanf("%100s", buf); // 100-char limit, no ampersand!
    data[a] = malloc(sizeof(char)*(strlen(buf)+1));
    strcpy(data[a], buf);
}

これで、印刷する準備が整いました:

for(a=1;a<=number;a++)
{
    printf("Your data No_%d: is %s\n",a, data[a]);
}

最後に、割り当てたデータを解放する必要があります。

for(a=1;a<=number;a++)
{
    free(data[a]);
}
于 2012-10-14T11:57:09.923 に答える
0

あなたのコードは完全に正しくありません。長さ 20 の文字配列、つまり長さ 20 の文字列を宣言しています。scanf では、offset aからそれに書き込みます。あなたがする必要があるのは、char 型の 2D 配列を decare し、正しい char 配列に読み込むことです。これを例として見てください:

char[20][20] data;

for(int i = 0;i < 20;i++)
    scanf("%s", &data[i][0]);

また、ループ内で に変更a=1a=0ます。そうでない場合は、number-1数回ループします。これは、 を仮定number=2すると、最初のループでテスト ( a<number) が成功するためです。2 番目にが 2 にインクリメントされ、が より小さくないaため、テストは失敗します。anumber

于 2012-10-14T11:56:13.237 に答える
0

各読み取りが個別の文字列になるように、文字列の配列を使用する必要があります。このコードには他にも複数のクリーンアップがあります — 未使用の変数の削除、入力が成功したことの確認、入力の検証、入力時のデータのエコー (デバッグ手法)、入力後のデータのエコー (別のデバッグ手法 — ただし、通常は使用する1つだけ)、scanf()配列へのポインターを想定していないため、への呼び出しを修正するなど。

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

int main(void)
{
    char data[20][20]; 
    int number = -1,a;

    printf("How many data do you want to store (1-20) ");
    if (scanf("%d", &number) != 1 || number > 20 || number <= 0)
    {
        fprintf(stderr, "Invalid number: %d\n", number);
        return(EXIT_FAILURE);
    }
    for (a=0; a < number; a++)
    {
        printf("Input your data No_%d:       ",a+1);
        if (scanf("%19s", data[a]) != 1)
        {
            fprintf(stderr, "Oops: failed to read anything\n");
            return(EXIT_FAILURE);
        }
        printf("%2d: %s\n", a+1, data[a]);
    }

    for (a = 0; a < number; a++)
        printf("Check %2d: %s\n", a+1, data[a]);

    return 0;
}
于 2012-10-14T12:07:32.767 に答える