我正在尝试逐位扫描大量数据并存储到数组中然后打印出来。
但是我从早上起就被打动了,无法找到我正在做的那个愚蠢的错误。
以下是代码:
int a[1000000];
int main()
{
//t is number of test cases
int t,i=0,n;
char c;
scanf("%d\n",&t);
while(t--)
{
while((c=getchar())!='\n')
{
scanf("%c",&c);
printf("scanned\n");
a[i]=c-48;
i++;
}
n=i-1;
for(i=0;i<=n;i++)
printf("%d",a[i]);
printf("\n");
i=0;
}
}
答案 0 :(得分:2)
这里有几个问题:
您必须验证t
是否已正确初始化为非负值。
您正在阅读用户输入两次 - 首先使用getchar()
,然后使用scanf()
。
您未验证扫描的字符是0
和9
之间的十进制数字。
您依靠48
作为数字0
的ASCII代码,情况并非总是如此。
以下是建议的解决方法:
int t,n,i;
char c;
t = 0;
scanf("%d\n",&t);
for (n=0; n<t; n++)
{
scanf("%c",&c);
if (!('0' <= c && c <= '9'))
break;
printf("scanned\n");
a[n] = c-'0';
}
for (i=0; i<n; i++)
printf("%d",a[i]);
printf("\n");
答案 1 :(得分:0)
您的程序有一些修复,需要更正。
\n
的scanf(&#34;%d \ n&#34;,&amp; T公司); scanf
和getchar()
。因为两者都会等待用户输入。
scanf
在循环中使用while((c=getchar())!='\n')
{
scanf("%c",&c);
扫描数据时,您需要在%c
之前提供一个空格。
%c
int a [1000000];
scanf(" %c",&c);