我对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循环中存在一个问题,因为它没有显示,我只是不确定除此之外是否还有其他问题。任何帮助都非常感谢提前。
答案 0 :(得分:0)
这条线路不对。
scanf("%d", &textChar);
%d
作为格式说明符时,该函数将尝试读取整数并将其存储在给定地址。由于textChar
的类型不是int
,因此您将立即遇到未定义的行为。您应该使用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()
。它们似乎没有任何用途。