使用getchar()时不同时间的不同输出

时间:2018-03-24 15:24:01

标签: c

在这个程序中(基本上将输入复制到数组中并最终显示它) - >

#include<stdio.h>

int main()
{
    int c,i=0;
    char arr[100];

    while((c=getchar())!=EOF)
    {
        if((((c>=65)&&(c<=90))||((c>=97)&&(c<=122)))||(c==' ')||(c=='\t'))
        arr[i]=c;
        i++;
    }

    printf("\n%s in print\n",arr);

  return 0;
}

至于成功传递 EOF ,需要按两次或一般按ENTER后 CTRL + D 。所以我写了这个版本只允许某些字符进入数组。但输出非常可疑,有时它会提供无错输出,有时则不是。以下是两次运行的输出:

enter image description here

2 个答案:

答案 0 :(得分:3)

printf %s需要一个字符串。您正在传递arr,这不是字符串。字符串需要'\0'终止符来标记结尾。

答案 1 :(得分:0)

arr是char数组,它应该是 null终止。何时陈述

printf("\n%s in print\n",arr);执行%s格式尝试打印直到'\0'字符,但在您的情况下,最后没有'\0',因此它会打印一些垃圾数据。

while((c=getchar())!=EOF) {
              if((((c>=65)&&(c<=90))||((c>=97)&&(c<=122)))||(c==' ')||(c=='\t'))
              arr[i]=c;
              i++;
 }

当循环失败时,最后放置'\0'字符。

arr[i] = '\0'