Подсчитайте все буквы в каждой строке в текстовом файле и распечатайте их - PullRequest
0 голосов
/ 02 апреля 2019

Мне нужно написать скрипт C, с помощью которого я смогу подсчитать все буквы в каждой строке текстового файла и распечатать каждое значение. Текстовый файл должен быть параметром, заданным при запуске сценария C.

#include <stdio.h>
#include <string.h>
int main(int argc,char * argv[])
{
    char *g, linie[1000];
    int nrChar=0;
    FILE *f=fopen(argv[1],"r");
    g=fgets(linie,1000,f);
    while(g!=NULL)
    {
    nrChar=strlen(linie)-2;
    printf("cuv is %d\n",nrChar);
        g++;
        g=fgets(linie,1000,f);     
    }   

    fclose(f);
    return 0;
}

Это то, что я пытался, но это не работает.

Я ожидаю что-то вроде:

2
3
5
4
1

Предположим, у меня есть файл .txt, который содержит:

do
abc
linux
bash
c

1 Ответ

0 голосов
/ 02 апреля 2019

У вас есть несколько проблем:

  1. Вы не печатаете значение, возвращаемое strlen, которое вы хотите сделать.
  2. fgets покидает завершающий символ новой строки, если он существует, в строке . Поэтому вам нужно удалить его.
  3. Ваши строки g++ и max=1 ничего не делают. Удалить их.
  4. Проверьте, удалось ли fopen, прежде чем работать с файлом.
  5. Проверьте, передал ли пользователь аргумент имени файла в командной строке (то есть: argc >= 2, прежде чем пытаться ссылаться на argv[1].
  6. Вы вычисляете максимальную длину всех слов в вашей переменной maxChar, но затем вы печатаете 'nrChar`, который является длиной последнего найденного слова.

Этот код компилируется без предупреждений с использованием gcc -Wall -Wextra и дает ожидаемый результат:

#include <stdio.h>
#include <string.h>
int main(int argc,char * argv[])
{
    char *g,*p,linie[1000];
    int maxChar=0, nrChar=0;
    if (argc < 2)
    {
        fprintf(stderr, "Usage: %s <filename>\n", argv[0]);
        return 0;
    }
    FILE *f=fopen(argv[1],"r");
    if (f == NULL)
    {
        fprintf(stderr, "Error: Could not open %s for read!\n", argv[1]);
        return 0;
    }
    g=fgets(linie,1000,f);
    while(g!=NULL)
    {
        p = strchr(linie, '\n');  //fgets leaves the '\n' in the buffer
        if (p != NULL) *p = 0;    //find the '\n' and replace with 0

        nrChar = strlen(linie);
        printf("%d\n", nrChar);   //need to print the value from strlen
        if(maxChar<nrChar)
        {
            maxChar = nrChar;
        }
        g=fgets(linie,1000,f);
    }
    printf("The longest word has %d letters \n",maxChar);

    fclose(f);
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...