我想找到这个字符串的ascii值和平均字符数

时间:2013-10-18 10:15:47

标签: c

我已经做到了这个

#include<stdio.h>
#include<string.h>

int main()
{

char str[100];
int i=0;

printf("Enter any string: ");
scanf("%s",str);

printf("ASCII values of each characters of given string: ");
while(str[i])
     printf("%d ",str[i++]);


return 0;
}

当我尝试编译它时,我没有得到所有的ASCII值。请你告诉我我的错误在哪里。

3 个答案:

答案 0 :(得分:1)

它会在遇到输入空间的位置停止。

所以,如果你进入了 Hello World scanf将在Hello中显示字符的ascii值

解决方案:使用fgets

#include<stdio.h>
#include<string.h>

int main()
{

char str[100];
int i=0;

printf("Enter any string: ");
fgets(str, sizeof(str), stdin);

printf("ASCII values of each characters of given string: ");
while(str[i])
     printf("%d ",str[i++]);


return 0;
}

答案 1 :(得分:1)

首先;正确缩进代码(在Linux上,您可以使用GNU indent实用程序或astyle)。

将其与所有警告和调试信息(例如gcc -Wall -g)进行编译。了解如何使用调试器(gdb)逐步运行它。

然后,您的scanf("%s", str);很危险(至少应为scanf("%99s", str);,请参阅scanf(3))!如果用户输入200个字符的非常长的“单词”(例如,数字0的200倍),则可能会发生崩溃或undefined behavior。 Alos注意到%s读取空格或类似空白的字符。我认为在阅读缓冲区之前将其归零是一个好习惯。因此请将scanf替换为

 memset (str, 0, sizeof(str));
 fgets (str, sizeof(str), stdin);

最后,您不会刷新buffered stdout输出(请参阅stdio(3)setvbuf(3)fflush(3)等等。)。或许尝试

while(str[i])
  printf("%d ",str[i++]);
putchar('\n');
fflush(stdout);

fflush的最后一次调用在这里没用,但是这是一个好习惯(或者用<换行符printf结束每个 \n格式字符串 stdout 通常但不总是行缓冲!)

答案 2 :(得分:0)

如果输入字符串中有空格,

scanf将停止读取。您可以使用fgets或执行以下操作:

#include<stdio.h>
#include<string.h>

int main()
{

   char str[100];
   int i=0;

   printf("Enter any string: ");
   str[i] = getchar();

   while(str[i]!='\n'){
        str[i+1] = getchar();
        i++;
   } 

   str[i] = '\0';
   printf("%s\n",str);

   i=0;
   printf("ASCII values of each characters of given string: ");

   while(str[i]!='\0'){
        printf("%d ",str[i++]);
   }

   return 0;
}

修改

在评论中查找您要求的字符串的平均值:

#include<stdio.h>
#include<string.h>

int main()
{

     char str[100];

   int sum=0;
   int average=0;
       int i=0;

    printf("Enter any string: ");
    str[i] = getchar();

    while(str[i]!='\n'){
        str[i+1] = getchar();
         i++;
    } 

    str[i] = '\0';
    printf("%s\n",str);

    i=0;
    printf("ASCII values of each characters of given string: ");

    while(str[i]!='\0'){
       sum = sum + str[i];
       printf("%d ",str[i++]);
    }

// To calculate average

   average = sum/(i-1);

   printf("\nAverage = %d\n",average);

       return 0;
}