每行发生符号

时间:2014-12-16 18:59:54

标签: c arrays statements

我希望得到符号的出现&#39 ;;'对于这个C程序的每一行。我输入文件Source.c的名称并尝试计算出现的符号,但我得到了所有&#39 ;;'的值。对于每一行。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>/* For exit() function */

int main()
{
   char file_name[150];
   FILE *file2 = 0;

   gets(file_name);

   {
      int rows = 1;//broq na vsichki redove

      int dotcoma[150];
      int j;
      int c=0;

      file2 = fopen(file_name, "r");//otvarq faial za chetene
      if (file2 == NULL){
         printf("Cannot open %s\n", file_name);
         exit(2);
      }//if

      for (j = 0; j < 150; j++)
         dotcoma[j]=0;

      do{
         c = fgetc(file2);
         if (c == '\n') rows++;

         if (';' == c)

            dotcoma[rows-1] ++;



      } while (c != EOF && rows <= 150);//chete do kraq na faila

      if (ferror(file2)){
         printf("Error reading file.\n");

      }//if

      printf("The number of the symbols on a row ");
      printf("Row %d: %f\n", j + 1, (float)dotcoma[j]);

   }

   if (fclose(file2) == EOF){
      printf("Cannot close %s\n", file_name);

   }
   _getche();
   return 0;
}

2 个答案:

答案 0 :(得分:1)

你几乎掌握了一切。你需要做的唯一改变就是放行

     printf("Row %d: %f\n", j + 1, (float)dotcoma[j]);

for循环中,将格式从%f更改为%d

  printf("The number of the symbols on a row \n");
  for (j = 0; j < rows; j++)
  {
     printf("Row %d: %d\n", j + 1, dotcoma[j]);
  }

您必须确保rows保持在150或以下。否则,您将最终访问数组dotcoma越界。一种方法是使用:

  do{
     c = fgetc(file2);
     if (c == '\n') rows++;

     if (';' == c)
        dotcoma[rows-1] ++;

  } while (c != EOF && rows <= 150);//chete do kraq na faila

答案 1 :(得分:0)

我取得了很大的进步。它现在计入每个';'的频率对于一条线,并希望添加一个新的符号频率以及'。'在我的情况下,但它说有堆栈arround变化。这里是代码工作,但只是没有第二个符号频率逗号++计数器。有人可以提供建议如何解决吗?

#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS /* Да си изключа предупрежденията*/
#endif

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>/* For exit() function */

int main()
{
    char file_name[1000];
    FILE *file2 = 0;

    gets(file_name);
    int rows = 1;//broq na vsichki redove
    int dotcoma[150];//broq na ;
    int coma[150];//broq na .
    int j;
    char c;

    file2 = fopen(file_name, "r");//otvarq faial za chetene
    if (file2 == NULL){
        printf("Cannot open %s\n", file_name);
        exit(2);
    }//if

    for (j = 0; j<150; j++)
        dotcoma[j] = 0;
    coma[j] = 0;
    do{
        c = fgetc(file2);
        if (c == '\n') rows++;
        else{
            if (c == ';')
            dotcoma[rows - 1]++;
            if (c == '.')
            coma[rows-1]++;
        }
    } while (c != EOF);//chete do kraq na faila


    if (ferror(file2)){
        printf("Error reading file.\n");
        exit(2);
    }//if

    printf("The number of the symbols on a row / the number of all symbols: ");
    for (j = 0; j<rows; j++){
        printf("Row %d: %f  %f\n", j + 1, (float)dotcoma[j], coma[j]);

    }
    _getche();
    if (fclose(file2) == EOF){
        printf("Cannot close %s\n", file_name);
        exit(2);

        _getche();
        return 0;
    }
}