[英]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);
随着打印的进行,还有一些其他需要解决的问题:
为空终止符分配一个额外的char
:
char A[201];
您也可以在循环中到达字符199时停止阅读。
当到达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.