我如何循环传递给函数的char数组并返回chars的数量

时间:2014-06-21 19:09:04

标签: c readline

#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

2 个答案:

答案 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;
}