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

问题描述 投票:-2回答:1

我需要编写一个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
c
1个回答
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;
}
© www.soinside.com 2019 - 2024. All rights reserved.