2

我在 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 个字符。我无法解决问题。你能帮我么?提前致谢。

4

5 回答 5

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();
}
于 2013-01-27T17:21:34.880 回答
2

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

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

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

你可以做这个检查你是否沉迷于getchar()

      if(c=getchar()) == '\n')
         c=getchar(); 
于 2013-01-27T17:24:33.183 回答
1

那么如何进行更正,den?

怎么样:

int ch;

while (i < 10 && (ch = getchar()) != EOF)
    if (ch != '\n')
        a[i++] = ch;
于 2013-01-27T17:22:42.713 回答
1

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

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

代替 :

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

于 2013-01-27T17:24:27.903 回答
0

可能,您可以使用getch()orgetche()代替getchar()来读取字符。

于 2013-01-27T17:24:10.933 回答