1

非常に長い整数を取りたい(1000桁まで含めることができます)。そして、各桁が配列の各場所に配置されるように配列に格納したいのですが、以下のコードを使用しようとすると、Enterキーを押すまで整数が0の位置になります。しかし、Enterキーを押すことはできません。ユーザーが完全な数字として書き込む場合でも、各桁は個別にスキャンされます。

for(count=0;number[count]!='\0';count++){
            scanf("%d",number+count);
        }

そこへの道は何ですか?

4

3 に答える 3

5

使用しないでくださいscanf。を使用fgetsして入力行をとして取得すると、文字としてchar*個々の数字を引き出して、自分char*で数字に変換できintます。scanf("%d", ...)ユーザーが数字として解析できない入力を入力すると、問題が発生します。

char *inputLine = malloc(sizeof(char) * (MAX_DIGITS + 1);
fgets(inputLine, MAX_DIGITS, stdin); // or replace stdin with a FILE *

fgets改行までの入力行全体を消費するか、引数2で指定された文字数で停止します。

数字ごとに読み続けたい場合は、を使用getchar()して個々の文字を読み取るかfgetc(FILE *)、ファイルから個々の文字を読み取ります。

char *inputLine = malloc(sizof(char) * (MAX_DIGITS + 1));
char ch = getchar();
int i = 0;
while ((ch != '\n') && (ch != EOF) && (i < MAX_DIGITS))
{
    inputLine[i++] = ch;
    ch = getchar();
}
于 2012-08-05T19:22:31.290 に答える
2

%d整数を読み取ります-一度に1文字を読み取りたい場合は、を使用するか、呼び出しを。%cに置き換えます。scanf()getchar(3)

于 2012-08-05T19:22:46.303 に答える
0

これを試して:

char number[SIZE];
int nDigits = 0;

printf("Write a number: ");
while ((number[nDigits] = getchar()) != '\n') nDigits++;

printf("The number is: %s\n", number);

また、number配列/文字列をゼロで埋める必要がある場合があることに注意してください。

于 2012-08-05T19:35:00.313 に答える