将文本文件中的字母存储到数组中

时间:2016-10-01 19:25:42

标签: c

我有点困惑如何通过数组并将每个字母添加到数组notes[]中。我不确定什么是递增while循环来扫描每个字符。我试图通过每个角色来查看它是否是一个字母,然后将其大写。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

int main(){
    FILE * files;
    char notes[1000];
    int charcounter = 0, wordcounter = 0, c;
    files = fopen("input.txt", "r");
    if(!files)
    {
        return EXIT_FAILURE;
    }
    if(files)
    {
        while(fgets(notes, sizeof notes, files) != NULL)
        {
            size_t i, n = strlen(notes);

            for (i = 0; i < n; i++) 
            {
                if(isalpha(notes[i]))
                {
                    int c = toupper(notes[i]);
                    putchar(c);
                    if(wordcounter == 50)
                    {
                        printf("\n");
                        wordcounter = 0;
                    }

                    if(charcounter == 5)
                    {
                        printf(" ");
                        charcounter = 0;
                    }
                    wordcounter++;
                    charcounter++;
                }

            }
        }
    }
    fclose(files);
    system("PAUSE");
    return 0;
}

我正在使用这个参考: int c;

FILE *file;
file = fopen("test.txt", "r");
if (file) {
    while ((c = getc(file)) != EOF)
        putchar(c);
    fclose(file);
}

1 个答案:

答案 0 :(得分:0)

fgets()将文件中的字符串读入char数组。在您的代码中,您将一个字符串读入名为 notes 的数组中。您应该遍历该变量中的每个字符,即C字符串。

一些一般性评论: a)不要返回-1。如果希望代码符合ANSI C,则返回EXIT_SUCCESS或EXIT_FAILURE,或者返回POSIX平台的正数。

b)在调用fgets()时使用sizeof,而不是两次硬编码数组的长度。

c)isalpha(),toupper()和putchar()需要一个int作为参数。您的代码使用char [1000]数组作为参数。这不应该在没有警告/错误的情况下编译。 (我试过,并按预期收到警告)。总是在启用所有警告的情况下进行编译是一个好习惯,它可以避免琐碎的错误。如果你使用gcc,那么选项-Wall -Wextra -pedantic可能很有用,至少在调试之前。

以下是您的计划的精简版,以说明我的评论:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

int main(void)
{
    FILE *f;
    char notes[1000];

    f = fopen("input.txt", "r");
    if (!f) {
        return 1;
    }
    while (fgets(notes, sizeof notes, f) != NULL) {
        size_t i, n = strlen(notes);
        for (i = 0; i < n; i++) {
            int c = toupper(notes[i]);
            putchar(c);
        }
    }

    fclose(f);
    return 0;
}

HTH