写(在文件中)和打印统计

时间:2016-12-30 14:55:52

标签: c

我的任务是创建一个打开.c文件的C程序,然后用户写入一些文本,然后打印文本以及(){} /和百分比评论的数量:整个文本C程序。 到目前为止,我有这个:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int k, j, m, n, l, z, count1 = 0, count2 = 0, count3 = 0, count4 = 0, count5 = 0, count6 = 0;
    char str[10000], chh, chhh;
    char ch, file_name[75];
    FILE *fp;

    printf("Enter the name of file you wish to see with extension .c or .txt\n");
    gets_s(file_name);

    fp = fopen_s(file_name, "r");  // reads the file

    if (fp == NULL)
    {
        perror("Error while opening the file.\n");
        _getche();
        exit(EXIT_FAILURE);
    }

    printf("The contents of %s file are :\n", file_name); //prints out the text
    int i = 0;
    while ((ch = fgetc(fp)) != EOF) {
        printf("%c", ch);
        str[i] = ch;
        i++;
    }
    int fsize = i;
    // code above opens up the symbols of the file, code below searches for specific symbols
    int count = 0;
    printf("\nEnter the character to be searched : "); //which symbol to search
    scanf_s("%c", &chh);
    for (i = 0; i < fsize; i++) {
        if (str[i] == chh)
            count++;
    }

    if (count == 0)
        printf("\nCharacter '%c' is not present", chh); //if there isn't one
    else
        printf("\nOccurence of character '%c' : %d", chh, count); //prints their number if there is

    for (k = 0; k<fsize; k++) {
        if (str[k] == '>')
            count1++;  
    }
    for (j = 0; j<fsize; j++) {
        if (str[j] == '<')
            count2++;
    }
    for (m = 0; m<fsize - 1; m++) {
        if (str[m] == '=' && str[m + 1] == '=')
            count3++;
    }
    for (n = 0; n<fsize - 4; n++) {
        if (str[n] == 'e' && str[n + 1] == 'l' && str[n + 2] == 's' && str[n + 3] == 'e') 
            count4++;
    }
    for (l = 0; l<fsize - 2; l++) {
        if (str[l] == 'i' && str[l + 1] == 'f')
            count5++;
    }

    int br;
    br = count4 + count5;
    printf("\nOccurence of character '%c' : %d", '>', count1);
    printf("\nOccurence of character '%c' : %d", '<', count2);
    printf("\nOccurence of character ==  : %d ", count3);
    printf("\nOccurence of character else : %d ", count4);
    printf("\nOccurence of character if: %d \n", count5);
    printf("\nobsht broi if+else: %d ", br);

    fclose(fp);
    return 0;
}

它打印出文件中的文本,搜索您想要的特定字符并打印出它。

PS:当我尝试在我的电脑上运行它时,Visual Studio会发出一堆错误和警告。我很困惑如何摆脱它们。 Errors image 谢谢!

2 个答案:

答案 0 :(得分:1)

使用GCC我可以通过改变一些方法来编译它。

  • 将gets_s更改为gets(file_name),这会产生一个警告,指出这是一个不安全的函数。
  • 将_getche()更改为getchar()
  • 将scanf_s()更改为scanf()
  • 将fopen_s()更改为fopen()

此代码在Linux上使用GCC编译和运行

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int k, j, m, n, l, z, count1 = 0, count2 = 0, count3 = 0, count4 = 0, count5 = 0, count6 = 0;
    char str[10000], chh, chhh;
    char ch, file_name[75];
    FILE *fp;

    printf("Enter the name of file you wish to see with extension .c or .txt\n");
    gets(file_name);

    fp = fopen(file_name, "r");  // reads the file

    if (fp == NULL)
    {
        perror("Error while opening the file.\n");
        getchar();
        exit(EXIT_FAILURE);
    }

    printf("The contents of %s file are :\n", file_name); //prints out the text
    int i = 0;
    while ((ch = fgetc(fp)) != EOF) {
        printf("%c", ch);
        str[i] = ch;
        i++;
    }
    int fsize = i;
    // code above opens up the symbols of the file, code below searches for specific symbols
    int count = 0;
    printf("\nEnter the character to be searched : "); //which symbol to search
    scanf("%c", &chh);
    for (i = 0; i < fsize; i++) {
        if (str[i] == chh)
            count++;
    }

    if (count == 0)
        printf("\nCharacter '%c' is not present", chh); //if there isn't one
    else
        printf("\nOccurence of character '%c' : %d", chh, count); //prints their number if there is

    for (k = 0; k<fsize; k++) {
        if (str[k] == '>')
            count1++;  
    }
    for (j = 0; j<fsize; j++) {
        if (str[j] == '<')
            count2++;
    }
    for (m = 0; m<fsize - 1; m++) {
        if (str[m] == '=' && str[m + 1] == '=')
            count3++;
    }
    for (n = 0; n<fsize - 4; n++) {
        if (str[n] == 'e' && str[n + 1] == 'l' && str[n + 2] == 's' && str[n + 3] == 'e') 
            count4++;
    }
    for (l = 0; l<fsize - 2; l++) {
        if (str[l] == 'i' && str[l + 1] == 'f')
            count5++;
    }

    int br;
    br = count4 + count5;
    printf("\nOccurence of character '%c' : %d", '>', count1);
    printf("\nOccurence of character '%c' : %d", '<', count2);
    printf("\nOccurence of character ==  : %d ", count3);
    printf("\nOccurence of character else : %d ", count4);
    printf("\nOccurence of character if: %d \n", count5);
    printf("\nobsht broi if+else: %d \n", br);

    fclose(fp);
    return 0;
}

答案 1 :(得分:0)

请在下面找到我的发现。

  1. gets_s(FILE_NAME); - &GT;我不认为这是正确的。 gets_s占用2个参数而不是1请使用获取而不是尝试或简单的scanf来检查它是否正常工作。
  2. 2._getche()请为该功能使用#include头文件。使用它可以避免这个问题。

    1. fopen_s - &gt; Fopen的参数集无效。你需要一个文件指针作为第一个参数。请重新设置使用的功能。最好选择有2个参数的fopen。

    2. scanf_s - &gt;有一个参数(参数),您可以在其中指定缓冲区大小。因此,您使用的上述代码sacnf_s函数是合成错误的。请相应更改。

    3. 请查找常用的已更改代码。我冒昧地将gets_s更改为gets,fopen_s更改为fopen,scanf_s更改为scanf并构建它。没有错误。请找到以下代码供您参考。

      #include <stdio.h>
      #include <stdlib.h>
      #include<conio.h>
      FILE *fp;
      int main()
      {
      int k, j, m, n, l, z, count1 = 0, count2 = 0, count3 = 0, count4 = 0, count5 = 0, count6 = 0;
      char str[10000], chh, chhh;
      char ch, file_name[75];
      
      
      printf("Enter the name of file you wish to see with extension .c or .txt\n");
      gets(file_name);
      
      fp = fopen(file_name, "r");  // reads the file
      
      if (fp == NULL)
      {
          perror("Error while opening the file.\n");
          getchar();
          exit(EXIT_FAILURE);
      }
      
      printf("The contents of %s file are :\n", file_name); //prints out the text
      int i = 0;
      while ((ch = fgetc(fp)) != EOF) {
          printf("%c", ch);
          str[i] = ch;
          i++;
      }
      int fsize = i;
      // code above opens up the symbols of the file, code below searches for specific symbols
      int count = 0;
      printf("\nEnter the character to be searched : "); //which symbol to search
      scanf_s("%c", &chh);
      for (i = 0; i < fsize; i++) {
          if (str[i] == chh)
              count++;
      }
      
      if (count == 0)
          printf("\nCharacter '%c' is not present", chh); //if there isn't one
      else
          printf("\nOccurence of character '%c' : %d", chh, count); //prints their number if there is
      
      for (k = 0; k<fsize; k++) {
          if (str[k] == '>')
              count1++;
      }
      for (j = 0; j<fsize; j++) {
          if (str[j] == '<')
              count2++;
      }
      for (m = 0; m<fsize - 1; m++) {
          if (str[m] == '=' && str[m + 1] == '=')
              count3++;
      }
      for (n = 0; n<fsize - 4; n++) {
          if (str[n] == 'e' && str[n + 1] == 'l' && str[n + 2] == 's' && str[n + 3] == 'e')
              count4++;
      }
      for (l = 0; l<fsize - 2; l++) {
          if (str[l] == 'i' && str[l + 1] == 'f')
              count5++;
      }
      
      int br;
      br = count4 + count5;
      printf("\nOccurence of character '%c' : %d", '>', count1);
      printf("\nOccurence of character '%c' : %d", '<', count2);
      printf("\nOccurence of character ==  : %d ", count3);
      printf("\nOccurence of character else : %d ", count4);
      printf("\nOccurence of character if: %d \n", count5);
      printf("\nobsht broi if+else: %d ", br);
      
      fclose(fp);
      return 0;
      

      }

      如果你需要任何帮助,请随时ping我:)谢谢。