1

我想取一个很长的整数(它可能包含多达 1000 位数字)。我想将它存储在一个数组中,以便每个数字都位于数组的每个位置。但是如果我尝试使用下面的代码,它将把整数放在 0 位置,直到我按下回车键。但我不能按回车。即使用户将其写为完整的数字,也会单独扫描每个数字。

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

那里的路是什么?

4

3 回答 3

5

不要使用scanf. 用于fgets获取一行输入作为 a ,然后您可以从as 字符char*中提取单个数字,并自己将它们转换为数字。如果用户输入无法解析为数字的输入,则会导致问题。char*intscanf("%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读取一个整数 - 如果您想一次读取一个字符,请使用%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 回答