我需要编写一个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
答案 0 :(得分:0)
您有几个问题:
strlen
返回的值。fgets
leaves the trailing newline, if it exists, in the string。因此,您需要将其删除。g++
和max=1
无效。删除它们。fopen
是否成功。argc >= 2
之前,检查用户是否在命令行上传递了文件名参数(即:argv[1]
。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;
}