计算文本文件中每一行的所有字母并打印出来

时间:2019-04-02 20:01:54

标签: c

我需要编写一个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 :(得分:0)

您有几个问题:

  1. 您不是要打印strlen返回的值。
  2. fgets leaves the trailing newline, if it exists, in the string。因此,您需要将其删除。
  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;
}