使用acsii的C代码频率表。

使用acsii的C代码频率表。,c,C,我对C编程比较陌生,这是我第六周的课,到目前为止,我还没有遇到任何重大问题。我只是不知道我现在的作业是不是出了问题,几小时后就要交了。这是我到目前为止所拥有的。我正在使用visual studio 2012 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h> char textChar; int textLenght = 0; in

我对C编程比较陌生,这是我第六周的课,到目前为止,我还没有遇到任何重大问题。我只是不知道我现在的作业是不是出了问题,几小时后就要交了。这是我到目前为止所拥有的。我正在使用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;
}
\define\u CRT\u SECURE\u NO\u警告
#包括
#包括
#包括
字符文本字符;
int textLenght=0;
int asciiArray[128]={0};
int i;
int main()
{
printf(“输入一行文本:”);
scanf(“%d”和&textChar);
而((textChar=getchar())!='\n'){
textLenght++;
asciiArray[textChar]++;
}
printf(“\n频率表\n”);
printf(“-------------\n”);
printf(“总字符数%%\n”);
printf(“----\n”);
printf(“全部%5d%9.2f%\n”,textLenght,(textLenght*100.0)/textLenght);
对于(i=0;i<128;i++)
如果(asciiArray[textChar]!=0)
printf(“%c%d%9.2f%%\n”,i+“0”,asciiArray[textChar]);
getchar();
getchar();
返回0;
}

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

这句话不对

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

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

    更改行:

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


    我将删除对
    getchar()
    的最后两个调用。它们似乎没有任何作用。

    那么你认为
    (textLenght*100.0)/textLenght
    首先会输出什么<代码>100。总是无论
    textLength
    是什么。另外,不要使用
    scanf()
    。它是可怕的,而且同样难以正确使用。你只是弄错了。当您扫描
    textChar
    (为什么?我甚至不知道它的用途…)时,在扫描一个整数之后,
    scanf()
    将在输入缓冲区中保留换行符,因此您对
    getchar()
    的第一次调用将立即返回它,导致循环终止。改用
    fgets()
    。Textchar\n您从未更新过它。长度通常是gth。VisualStudio有一个很好的调试器。只需点击F10并逐步检查代码,看看哪里出错。使用所有警告和调试信息编译(
    gcc-Wall-g
    ),然后使用调试器(
    gdb
    )。阅读您正在使用的每个函数的文档。请注意,返回一个有用的结果(扫描项目的计数)。对于第一行,我试图存储输入的字符串的值。根据分配,需要存储的内容是“这是对字符串0123456789+~!@()($*%&^ stuff)的测试”我想要的输出是频率和百分比。@kcg,这不起作用。1.你需要使用
    %s
    来读取字符串。2.你需要提供一个指向字符串的指针,而不是指向一个
    字符的指针。3.如果你使用
    %s
    scanf
    将在第一个空白字符处停止。
    fgets()
    是阅读一行文本的更好功能。
    printf("Enter a line of text: ");
    
    while ((textChar = fgetc(stdin))!= '\n') {
    textLenght++;
    asciiArray[textChar]++;
    }