我想取一个很长的整数(它可能包含多达 1000 位数字)。我想将它存储在一个数组中,以便每个数字都位于数组的每个位置。但是如果我尝试使用下面的代码,它将把整数放在 0 位置,直到我按下回车键。但我不能按回车。即使用户将其写为完整的数字,也会单独扫描每个数字。
for(count=0;number[count]!='\0';count++){
scanf("%d",number+count);
}
那里的路是什么?
我想取一个很长的整数(它可能包含多达 1000 位数字)。我想将它存储在一个数组中,以便每个数字都位于数组的每个位置。但是如果我尝试使用下面的代码,它将把整数放在 0 位置,直到我按下回车键。但我不能按回车。即使用户将其写为完整的数字,也会单独扫描每个数字。
for(count=0;number[count]!='\0';count++){
scanf("%d",number+count);
}
那里的路是什么?
不要使用scanf
. 用于fgets
获取一行输入作为 a ,然后您可以从as 字符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();
}
%d
读取一个整数 - 如果您想一次读取一个字符,请使用%c
,或者将您的scanf()
调用替换为getchar(3)
.
试试这个:
char number[SIZE];
int nDigits = 0;
printf("Write a number: ");
while ((number[nDigits] = getchar()) != '\n') nDigits++;
printf("The number is: %s\n", number);
另外,请注意,您可能需要number
用零填充数组/字符串。