使用c中的getchar()扫描时的垃圾值

时间:2014-08-05 08:06:53

标签: c getchar

我正在尝试逐位扫描大量数据并存储到数组中然后打印出来。

但是我从早上起就被打动了,无法找到我正在做的那个愚蠢的错误。

以下是代码:

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;        
    }
}

2 个答案:

答案 0 :(得分:2)

这里有几个问题:

  1. 您必须验证t是否已正确初始化为非负值。

  2. 您正在阅读用户输入两次 - 首先使用getchar(),然后使用scanf()

  3. 您未验证扫描的字符是09之间的十进制数字。

  4. 您依靠48作为数字0的ASCII代码,情况并非总是如此。


  5. 以下是建议的解决方法:

    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)

您的程序有一些修复,需要更正。

  1. 请勿在{{1​​}} - &gt;中使用\n的scanf(&#34;%d \ n&#34;,&amp; T公司);
  2. 请勿同时使用scanfgetchar()。因为两者都会等待用户输入。 scanf
  3. 在循环中使用while((c=getchar())!='\n') { scanf("%c",&c);扫描数据时,您需要在%c之前提供一个空格。

    %c

  4. 扫描用户的所有输入后,再打印出来。 请尝试以下更改 -
  5.   

    int a [1000000];

    scanf(" %c",&c);