使用ascii的C代码频率表。

时间:2014-11-04 06:17:26

标签: c

我对C编程比较陌生,到目前为止我在课堂上的第6周没有任何重大问题。我只是想知道我的当前任务是否出错,并且仅在几个小时内到期。这是我到目前为止所拥有的。我正在使用visual studio 2012。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char textChar;
int textLenght = 0;
int asciiArray[128] = {0};
int i;

int main()
{
printf("Enter a line of text: ");
scanf("%d", &textChar);

while ((textChar = getchar())!= '\n') {
textLenght++;
asciiArray[textChar]++;
}
printf("\nFREQUENCY TABLE\n");
 printf("---------------\n");
 printf("Char Count %% of Total\n");
 printf("---- ----- ----------\n");
 printf(" ALL %5d %9.2f%%\n", textLenght,( textLenght * 100.0 ) / textLenght );

 for (i = 0; i < 128; i++)
     if( asciiArray[textChar] != 0 )
    printf("%c %d %9.2f%% \n",i+ "0",asciiArray[textChar]);

 getchar();
 getchar();
 return 0;
}

现在我知道我的for循环中存在一个问题,因为它没有显示,我只是不确定除此之外是否还有其他问题。任何帮助都非常感谢提前。

1 个答案:

答案 0 :(得分:0)

这条线路不对。

scanf("%d", &textChar);
  1. 我不清楚你要用这条线完成什么。
  2. 当您使用%d作为格式说明符时,该函数将尝试读取整数并将其存储在给定地址。由于textChar的类型不是int,因此您将立即遇到未定义的行为。
  3. 您应该使用getchar而不是fgetc(stdin),而不是标准C库函数。

    fgetc()会返回int。确保将textChar的类型更改为int。

    更改行:

    printf("Enter a line of text: ");
    scanf("%d", &textChar);
    
    while ((textChar = getchar())!= '\n') {
    textLenght++;
    asciiArray[textChar]++;
    }
    

    printf("Enter a line of text: ");
    
    while ((textChar = fgetc(stdin))!= '\n') {
    textLenght++;
    asciiArray[textChar]++;
    }
    

    我会删除前两次拨打getchar()。它们似乎没有任何用途。