繁体   English   中英

在C中通过getchar()读取第一行

[英]Reading first line by getchar() in c

我想通过getchar()读取第一行,但是编译器告诉我数组A是int类型。 如何使用getchar在数组中按字符保存第一行char?

#include <stdio.h>

int main(void) {
   FILE *fp;
   int i=0;
   char A[200];
   int c;

   fp = fopen("input.txt", "r");

   while ((c=getchar()) != '\n') && i<200) {
      A[i]=(char)c;
      i++;
   }
   for(i=0; i<200; i++) {
      printf("%s", A[i]);
   }
}

您的阅读(几乎)很好,最大的问题是印刷

但是,在修复它之前,您应该将getchar的调用更改为fgetc(fp) ,这可能是您想做的,因为您使用了fopen

如果要按字符打印行,则需要使用%c而不是指定的%s格式,当达到已读字符串的长度时,ans会停止迭代。 只要您对字符串进行空终止, %s说明符也可以。 它也让您避免循环:

A[i] = '\0';
printf("%s\n", A);

随着打印的进行,还有一些其他需要解决的问题:

  1. 为空终止符分配一个额外的char

     char A[201]; 

您也可以在循环中到达字符199时停止阅读。

  1. 当到达EOF时,请确保程序停止读取:

     while ((c=fgetc(fp)) != '\\n') && c != EOF && i<200) { ... } 

正如dasblinkenlight所说,%s指示符用于字符串,而%c则用于char。 因此,您的打印声明应为

printf("%c\n",A[I]);

为了确保文件没有结束,您还可以使用

!feof(fp)

在您的while循环中。 如果您正在读取的文件少于200个字符,则会遇到问题。 feof函数检查文件的结尾,以确保文件结束后不会读取数据。

你可以尝试这样的事情

#include <stdio.h>
int main(void)
{
    FILE *fp;
    int i=0;
    char A[200];
     int c;

  fp = fopen("input.txt", "r");

   while ((c=getchar()) != '\n' && i<200 )
     {
        A[i]=(char)c;
        i++;
     };
  for(int j=0; j<i; j++) // print only those item available in array 
   {
        printf("%c", A[j]);
   }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM