0

<stdio.h>C を使用して、任意の数の文字列を一度に 1 つずつ読み込みたいと思います。

while (scanf("%d ", &integer))

しかし、私はできません:

while (scanf("%s", string))

上記をどのように実装できますか?

入力は別々の行にあります。

4

4 に答える 4

3

通常、入力を文字列として読み取るために使用しますfgets。特に、入力の 1 行を 1 つの文字列として終了させたい場合は特にそうです。

次のように、scanset 変換と共に使用して、一度に 1 行ずつ読み取ることもできます。fscanf

char line[100], newline;

fscanf("%99[^\n]%c", line, &newline);

次にnewline=='\n'、行全体が正常に読み取られたかどうか、または指定したバッファーよりも行が大きかったかどうかを判断するかどうかを確認できます。

行指向の入力を読み取ろうとしている場合、通常は "%s" を (指定された長さであっても) 回避する必要があります。これは、行全体ではなく、空白で区切られたトークンを読み取るためです。

于 2012-05-01T05:51:16.013 に答える
0

文字配列を使用します。

char charArray[100];
while (scanf("%s", &charArray))
于 2012-05-01T05:43:22.833 に答える
0

あなたの問題は、ループを終了することだと思います。scanfスキャンに成功した要素の数を返します。文字列の場合、空の文字列も正常にスキャンされます。したがって、別の基準が必要です。

 while(scanf("%s",string)  && (strlen(string)!=0))
于 2012-05-01T05:51:12.217 に答える
0

元の質問から、あなたが何をしようとしているのか完全には理解できませんでした。あなたが任意の数の文字列を読みたいと言ったとき、私はそれを、あなたのプログラムが 0 から n 個の文字列を読み込めるようにしたいという意味だと解釈しました。残念ながら、C では、 のように読み取りたい文字列の最大数を制限 #define MAX_NUMBER_OF_STRINGS_TO_READ 25するか、洗練されたメモリ割り当てスキームを使用して文字列を読み取り、それを動的メモリ (malloc から返される) に追加する必要があります。 .

文字列の最大数を上限にアプローチし、次のスニペットを作成しました。

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

char charArray[5][25] = {0};

int main(int argc, char *argv[])
{
    int in_idx = 0;
    int out_idx = 0;

    printf("\n\n%s\n", "Enter no more than 5 strings, no more than 25 characters long.");

    while(fgets (charArray[in_idx], 25, stdin))
    {
        if('\n' == charArray[in_idx][0])
        {
            printf("%s\n", "Entry terminated with newline.");
            break;
        }

        in_idx++;
    }

    for(out_idx=0; out_idx < (in_idx + 1); out_idx++)
    {
        printf("%s", charArray[out_idx]);
    }

    printf("\n%s\n", "Program ended.");

    return 0;
}

終了文字を改行にしました。2 つの文字列だけが必要な場合は、2 番目の文字列を入力したときに Enter キーを押します。文字配列の最初の位置にある '\n' を探して fgets を終了しました。

于 2012-05-01T19:35:09.653 に答える