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

C 计算文本文件中每行上的所有字母并打印出来,c,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);

我需要写一个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;
}

假设我有一个.txt文件,其中包含:

do
abc
linux
bash
c

您有几个问题:

  • 您没有打印strlen返回的值,这正是您想要执行的操作
  • fgets
    。所以你需要移除它
  • 您的行
    g++
    ,和
    max=1
    没有任何作用。移除它们
  • 在对文件进行操作之前,请检查
    fopen
    是否成功
  • 在尝试引用
    argv[1]
    之前,检查用户是否在命令行上传递了文件名参数(即:
    argc>=2
  • 计算
    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;
    }
    
    #包括
    #包括
    int main(int argc,char*argv[])
    {
    char*g,*p,linie[1000];
    int maxChar=0,nrChar=0;
    如果(argc<2)
    {
    fprintf(stderr,“用法:%s\n”,argv[0]);
    返回0;
    }
    文件*f=fopen(argv[1],“r”);
    如果(f==NULL)
    {
    fprintf(stderr,“错误:无法打开%s进行读取!\n”,argv[1]);
    返回0;
    }
    g=fgets(线性,1000,f);
    while(g!=NULL)
    {
    p=strchr(linie,'\n');//fgets将'\n'留在缓冲区中
    如果(p!=NULL)*p=0;//找到“\n”并替换为0
    nrChar=strlen(linie);
    printf(“%d\n”,nrChar);//需要打印strlen中的值
    
    如果(maxchar)您正在调用
    strlen
    以获取每行的长度,但您没有在编译器警告上打印它返回的值sturn(
    gcc…-Wall-Wextra…
    /
    clang…-Weverything…
    )请注意警告……并正确缩进代码,以便查看发生了什么。您不需要
    fgets
    fgetc
    就足够了。可能也更简单!当然更正确!是的,我刚刚意识到我犯了一些新手错误,这是由于缺乏使用C的知识造成的。您的解决方案按预期工作,并且非常清楚好的,谢谢你!
    #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;
    }