使用gdb进行调试时输入的字符/字符串

时间:2018-05-15 19:46:32

标签: c gdb

我的程序包含字符输入代码,但在调试期间不考虑它。

它考虑其他数据类型的输入(int,float等)

程序:

               #include<stdio.h>
               int main()
                 {
                    int n,i=0;
                    char c;                               
                    scanf("%d",&n);
                    int a[20];
                    while(1)
                        {
                           scanf("%c",&c);
                           if(c=='\n')
                           break;
                           else
                             {
                                if(c!=32)
                                a[i++]=c-48;
                             }

                        }
                   for(i=0;i<10;i++)
                   printf("%d ",a[i]);

                    return 0;
               }

调试屏幕: enter image description here

1 个答案:

答案 0 :(得分:2)

您的scanf("%d",...)在缓冲区中留下一个新的行字符,然后由后续的scanf("%c",...)立即使用。要解决此问题,请在scanf消耗空格之后只允许一个scanf("%d",...)

int main()
{
    int n,i=0;
    scanf("%d",&n);

    int a[20];
    char c=0;
    scanf(" %c",&c);  // Consume white spaces including new line character before the value for c.
    while(c!='\n' && i < 20)
    {
        if(c!=32) {
            a[i++]=c-'0';
        }
        scanf("%c",&c);
    }
    for(int x=0;x<i;x++)
        printf("%d ",a[x]);

    return 0;
}