C 计算文本文件中每行上的所有字母并打印出来
我需要写一个C脚本,用它我应该能够计算文本文件中每行上的所有字母,并打印每个值。文本文件必须是运行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);
#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
您有几个问题:
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;
}