程序没有给出预期的输出

时间:2015-01-10 10:13:36

标签: c getchar

#include <stdio.h>
#include <limits.h>

int main() {

    enum loop {NO ,YES};
    enum loop okloop = YES;
    int i=0;

    char s[8];
    int lim=6;
    char c;

    while (okloop==YES)
    {
        if (i>=lim-1)
            okloop=NO;
        else if ((c=getchar())!='\n')
            okloop=NO;
        else if (c==EOF)
            okloop=NO;
        else {
            s[i]=c;
            ++i;
        }
    }
    for (i=0;i<5;++i)
        printf("this is the character %c\n",s[i]);
    return 0;
}

我只是从键盘输入一个字符并将其存储在一个数组中;然后我必须将存储在数组中的字符打印到屏幕上,但输出并不像我预期的那样。

3 个答案:

答案 0 :(得分:3)

根据我的理解,你需要改变

else if ((c=getchar())!='\n')

else if ((c=getchar()) == '\n')

否则,您最终不会在s[i]中存储任何有效

另外,作为旁注

  1. 始终初始化局部变量。
  2. return 0;
  3. 中添加main()
  4. 在读取输入后认为null终止s[i],以防您以后想要将其用作字符串
  5. 良好做法。

答案 1 :(得分:3)

为什么你不能这样做:

while((c = getchar()) != '\n' && i<lim-1)
    s[i++]=c;

您的代码不必要地使用了许多变量,这些变量可以通过上述循环来避免。


[由alk添加]

更多可读版本:

size_t i = 0;
int c = EOF;

...

while (
  ('\n' != (c = getchar())) && 
  (i < lim)
)
{
  s[i] = c;
  ++i;
}

微小的变化使事物更易于阅读,更易于理解,更不容易出错,更稳定。

不太优雅但更明显的解决方案:

size_t i = 0;

...

while (i < lim)
{
  int c = getchar();
  if ('\n' == c)
  {
    break;
  }

  s[i] = c;
  ++i;
}

答案 2 :(得分:0)

这就是你需要做的所有事情:

#include <stdio.h>

int main()
{
  int i=0, j;
  char s[8];
  char c;

  while (i < 8)
  {
    c = getchar();
    if (c == EOF)
      break;
    else if (c != '\n')
      s[i++]=c;
  }

  for (j = 0; j < i; ++j)
    printf("this is the character %c\n",s[j]);

  return 0;
}

循环访问用户输入(8 characters max)。当用户输入EOF (Ctrl + D)时,while loop将退出,直到该点输入的任何字符都将作为输出打印。如果给出\n作为输入,它将被忽略/不保存在数组中。