-1

我已经做到了这一点

#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 值。请你告诉我我的错误在哪里。

4

3 回答 3

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;
}
于 2013-10-18T10:20:51.450 回答
1

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

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

那么,你scanf("%s", str);是危险的(至少应该是scanf("%99s", str);,见scanf(3))!如果用户输入一个非常长的 200 个字符的“单词”(例如 digit 的 200 倍),您可能会遇到崩溃或未定义的行为0。Alos 注意到%s最多读取一个空格或类似空白的字符。我相信在阅读之前将缓冲区归零是一个好习惯。所以替换你scanf

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

最后,您没有刷新缓冲 stdout输出(请参阅stdio(3)setvbuf(3)fflush(3)等)。试试吧

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

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

于 2013-10-18T10:23:04.157 回答
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;
}

编辑:

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

#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;
}
于 2013-10-18T10:23:14.063 回答