我需要从文件中读取文本(几句话的文本),然后记下所有独特的字符。要做到这一点,我需要使用一个数组。我写了这段代码,但它什么都没给我。
#include <stdio.h>
int main(void) {
int i;
FILE *in = fopen("test.txt", "r");
if (in) {
char mas[50];
size_t n = 0;
int ch;
while ((ch = getc(in)) != EOF) {
mas[n++] = (char)ch;
}
fclose(in);
}
for (i = 0; i < 50; i++) {
printf("%c", mas[i]);
printf("\n");
}
return 0;
}
答案 0 :(得分:1)
//low level input output commands method
#include <fcntl.h>
int main()
{
int x,i,n,v=1;
char s[256],str;
for (i=1;i<=255;i++)
s[i]='0';
x=open("out.txt",O_RDONLY);
if (x==-1)
{
printf("Invalid file path");
return 0;
}
while (n!=0)
{
n=read(x,&str,1);
s[(int)str]='1';
v=0;
}
close(x);
for (i=1;i<=255;i++)
if (s[i]=='1')
printf("%c",(char)i);
if (v)
printf("Blank file!");
close(x);
return 0;
}
答案 1 :(得分:0)
scope
出现问题。 mas
已在if
代码块中声明,并且在if
块之外无法显示。将mas
的声明移到块外。您还需要将n
保留在外面,例如:
int i;
char mas[50];
size_t n = 0;
接下来,您无法将阅读限制为less than 50 chars
,并且很容易会溢出mas
。在n
上添加一项检查:
while ((ch = getc(in)) != EOF && n < 50) {
最后将您的字符写入限制为读取n
:
for(i=0;i<n;i++)
那将编译并运行。如果编译时启用了警告,则编译器会为您确定scope
问题。始终至少使用-Wall -Wextra
进行编译。
答案 2 :(得分:-1)
如果您打算在阵列中读取一些字符并打印出唯一的字符,请检查以下代码
#include <stdio.h>
int main(void)
{
int i,j,flag;
char mas[50];
size_t n = 0;
FILE *in = fopen("test.txt", "r");
if (in) {
int ch;
while ((ch = getc(in)) != EOF && n < 50) {
mas[n++] = (char)ch;
}
fclose(in);
}
for(i=0;i<n;i++)
{
flag = 0;
for(j=i+1;j<n;j++)
{
if( mas[i] == mas[j])
{
flag = 1;
break;
}
}
if(!flag)
{
printf("%c\n",mas[i]);
}
}
return 0;
}