#include "Definition.h"
#include <stdio.h>
#include "ExternalVar.h"
#include <stdlib.h>
#include <string.h>
extern int Readline(),CountWord(),CountsUpdate();
char Line[MaxLine]; /* one line from the file */
int NChars = 0, /* number of characters seen so far */
NWords = 0, /* number of words seen so far */
NLines = 0, /* number of lines seen so far */
LineLength; /* length of the current line */
int wc = 0,
lc = 0,
cc = 0,
tc = 0;
int i;
main(int argc, char *argv[])
{
FILE *fp;
fp= fopen(argv[1],"r");
if (fp)
{
while (i=fscanf(fp,"%s",Line)!=EOF)
///printf("%s \n",Line);
cc=Readline(Line);
printf("%d \n",cc);
fclose(fp);
}
return 0;
}
这是我的主要功能我将char数组Line []传递给函数Readline(Line),我希望它返回数组中的字符数。
这是函数Readline.c。无论我使用哪个文本文件作为参数,我都会将84作为返回值。因为我是C编程新手,所以不确定我做错了什么。请帮忙。
#include "Definition.h"
#include "ExternalVar.h"
#include <stdio.h>
int Readline(char *Line)
{
int i;
for (i = 0; Line[i] == '\n' ; i++)
{
return i;
}
}
输出如下
taj @ taj:〜/ Desktop / 2014_Summer_CIS5027_Asg2 $ gcc Main.c Readline.c taj @ taj:〜/ Desktop / 2014_Summer_CIS5027_Asg2 $ ./a.out b.txt
84
答案 0 :(得分:0)
你几乎没有问题:
1)你可能想检查,直到你点击\n
。所以情况应该是:
for (i = 0; Line[i] != '\n' ; i++)
2)您的输入可能不包含\n
。所以你还应该检查你是否到达了字符串的末尾:
for (i = 0; Line[i] && Line[i] != '\n' ; i++)
3)如果\n
中的第一个字符是Line
怎么办?它根本不会进入循环,在这种情况下你不返回任何东西。所以你应该初始化i=0
并返回它。您可以将函数重写为:
int Readline(char *Line)
{
int i = 0;
for (i = 0; Line[i] && Line[i] != '\n' ; i++)
{
;
}
return i;
}
4)具有fscanf()
格式的%s
即使您的输入文件包含\n
,也不会读取fgets()
。您可能希望使用\n
来读取哪个读取while (fgets(Line, sizeof Line, fp)) {
...
}
字符:
int
5)main()函数应返回int main(int argc, char *argv[]) {... }
:{{1}}
答案 1 :(得分:0)
int Readline(char *Line){
int i;
for (i = 0; Line[i] != '\0' ; i++)//newline is not included in the Line. Because read by fscanf(fp,"%s",Line)
;
return i;
}