使用字符数据类型的异常输出

时间:2013-01-27 17:17:45

标签: c

我在Turbo c 3.1中用C编写了一个练习代码。我的目标是获得角色输出。我的代码如下:

    #include<stdio.h>
    #include<conio.h>

    void main(){

       char a[10],b;
       int i;

       clrscr();

       for(i=0;i<10;i++)
          a[i]='$';

       for(i=0;i<10;i++){
          b=getchar();
          a[i]=b;
       }

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

       getch();
   }

在这里,我必须使用我输入的内容获得10个字符,但在执行后我只有5个字符。我无法解决这里的问题。 你能帮我么? 提前谢谢。

5 个答案:

答案 0 :(得分:3)

当你执行getchar()时,它会读取一个字符。

因此当你输入类似的东西时 a,然后输入, 您键入的内容实际上是2个字符a'\n'。 因此,输出中只有5个字符和5'\ n'。

试试这个

#include<stdio.h>
#include<conio.h>

void main(){

   char a[10],b;
   int i;

   clrscr();

   for(i=0;i<10;i++)
      a[i]='$';

   for(i=0;i<10;i++){
      b=getchar();
      if(b=='\n'){i--;continue;}
      a[i]=b;
   }

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

   getch();
}

答案 1 :(得分:2)

你可以做一个简单的scanf来解决你的问题

scanf("%c",&a[i]);

但是,要了解getchar()的作用,每次调用它时,它都会读取输入的下一个字符,并将其返回给您,而不管该字符是什么。在您的情况下,在输入数字后键入\n字符。因此,它会在每个数字之后以\n存储您的第一个数字。

如果您沉迷于getchar()

,可以执行此检查
      if(c=getchar()) == '\n')
         c=getchar(); 

答案 2 :(得分:1)

  

那么如何进行修正,den?

怎么样:

int ch;

while (i < 10 && (ch = getchar()) != EOF)
    if (ch != '\n')
        a[i++] = ch;

答案 3 :(得分:1)

可以使用更简单的解决方案:

scanf("%c",&a[i]);

而不是:

b = getchar();
a[i] = b;

答案 4 :(得分:0)

您可以使用getch()getche()代替getchar()来阅读字符。