如何将文件从文件放入数组

时间:2014-12-30 17:11:29

标签: c arrays file-io unique

我需要从文件中读取文本(几句话的文本),然后记下所有独特的字符。要做到这一点,我需要使用一个数组。我写了这段代码,但它什么都没给我。

#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;
}

3 个答案:

答案 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;
}