5

こちらで初めて質問します。これに関するスレッドが既にある場合は申し訳ありませんが、いくつか検索したところ、探していると思われるものが見つかりませんでした。私は C に非常に慣れていないので、マイクロコントローラー システム クラスの宿題をいくつか練習しています。int現在、組み込み C に入る前に簡単な演習に取り組んでおり、コンマで区切られた 10 個の数字からなるテキスト行を取得し、それをs の配列に入力するプログラムを作成しようとしています。substringヒントとして、 andを使用するように言われましたatoi。私はそれを正しくすることに近づいていると思いますが、数値を適切に出力することはできません。

また、私はスプーンで与えられた答えを探していません。今のところ、いくつかのヒントで十分です。解決策を求める前に、自分で調べてみたいと思います。

これが私のコードです:

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

int main(void)
{
    int a[10];
    char str[] = {1,2,3,4,5,6,7,8,9,10}; //contains string of numbers
    int i;
    puts("This prints out ten numbers:");

    for (i = 0; i < 10; i++)
    {
        a[i] = atoi(str);
        printf("%d", a[i]);
            //i'm guessing the problem lies in one of the above two lines
    }
    return 0;
}

これにより、次のように出力されます。

This prints out ten numbers:
0000000000

助けてくれる人に感謝します!クリス

4

4 に答える 4

3

コンマで区切られたテキスト行を使用する必要があると言っていましたが、実際にはchar10 個の (バイナリ) 整数を含む配列を宣言しています。それを文字列にするには、これを行うだけです:

char str[] = "1,2,3,4,5,6,7,8,9,10";

次に、この文字列を処理して、各数値を配列に取得する必要がありますint

于 2013-03-07T23:07:57.953 に答える
1

stringまず、次のように a を宣言する必要があります。

char str[] = {"1,2,3,4,5,6,7,8,9,10"};

"数字を文字列全体にしました。<string.h>次に、それらをトークン化し、この状況で非常に便利なライブラリを使用する必要があります。

トークン化の方法は次のとおりです。

最初にトークン バッファを定義します。

char* token;

token = strtok(str,",");   //think of it as substring, the part of the str before the comma
for (i = 0; i < 10; i++)
{
    a[i] = atoi(token);
    printf("%d\t", a[i]);
            //i'm guessing the problem lies in one of the above two lines
    token = strtok(NULL, ","); //this line is also required for tokenizing the next element
}

このstrtok()関数を使用して、要素をカンマで区切って、数字の文字列を取得しました。関数を使用atoi()してそれらを整数に変換し、出力しました。理解を深めるために、関数のこのリファレンスを参照してください。strtok()

于 2013-03-07T23:20:35.980 に答える
0

問題は、文字列の作成方法にあります。
私の前の答えを許してください、私はあなたの質問を誤解しました:

簡単に言えば、宣言は次のようになります。

char str[] = "1,2,3,4,5,6,7,8,9, 10, 12";

次に、strtokを使用して、文字列を区切り文字(この場合はコンマ)を省略した文字列の配列に分割し、配列メンバーをに渡します。atoi

では、なぜコードが機能しないのですか?
まず、文字はアポストロフィで囲む必要があります。そうしないと、コンパイラは文字通り渡した数値をASCII値として受け取ります。

次に、Cの配列は次のように char str[] = {'1', '2', '3', '4', '5'};なります。コンマで区切られた文字列を意味するのではなく、これらのコンマは、文字列全体ではなく、それぞれ独自のインデックスでARRAYメンバーを区切ります。

于 2013-03-07T23:01:10.150 に答える
0

の定義は、char str[] = {1,2,3,4,5,6,7,8,9,10};実際には文字の値を 1 から 10 に設定します。

文字の ASCII チャートでは、これらは印刷できない制御文字です。1 の代わりに「1」を書き込むと、値が ASCII 値の 1、つまり 0x31 に設定されます。

別の間違いは、定義内のコンマが定義内の値を区切るだけであるため、結果は区切られていない文字の配列になるため、12345678910.

だから正しい方法は char str[] = "1,2,3,4,5,6,7,8,9,10";

于 2013-03-07T23:07:15.150 に答える