只读取文件中每行的第一个字符

时间:2013-12-11 15:54:00

标签: c file

我目前正在尝试只读取和处理“.c”文件的每一行中的第一个字符。到目前为止,我已经看到了这个代码,但是n甚至没有打印出来的循环:

void FileProcess(char* FilePath)
{
    char mystring [100];
    FILE* pFile;
    int upper = 0;
    int lower = 0;
    char c;
    int n =0;
    pFile = fopen (FilePath , "r");
    do {
      c = fgetc (pFile);
      if (isupper(c)) n++;

    } while (c != EOF);

    printf("6");
    printf(n);
    fclose (pFile);
}

1 个答案:

答案 0 :(得分:3)

几点:

  1. 您没有正确打印n。您将它作为“格式化字符串”提供给printf。令人惊讶的是,你侥幸逃脱 - 这通常会造成严重破坏。
  2. 您正在一次阅读一个角色。如果您只想打印每行的第一个字符,最好一次读一行,然后打印第一个字符。使用fgets将整行读入缓冲区(确保缓冲区足够大)。
  3. 示例(使用@chux的输入更新 - 并附带一些额外的代码以帮助调试“n = 1”问题):

    void FileProcess(char* FilePath)
    {
        char mystring [1000];
        FILE* pFile;
        int upper = 0;
        int lower = 0;
        char c;
        int n =0;
        pFile = fopen (FilePath , "r");
        printf("First non-space characters encountered:\n")
        while(fgets( myString, 1000, pFile) != NULL)
          int jj = -1;
          while(++jj < strlen(myString)) {
            if ((c = myString[jj]) != ' ') break;
          }
          printf("%c", c);
          if (isupper(c)) {
             printf("*U*\n"); // print *U* to show character recognized as uppercase
             n++;
          }
          else {
             printf("*L*\n"); // print *L* to show character was recognized as not uppercase
          }
        }
    
        printf("\n");
        printf("n is %d\n", n);
        fclose (pFile);
    }
    

    注意还有其他更强大的读取行的方法,以确保您拥有所有内容(我最喜欢的是getline(),但它并不适用于所有编译器)。如果您确定您的代码行不是很长,那么这将起作用(可能会使缓冲区大于100个字符)