我已经做到了这个
#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值。请你告诉我我的错误在哪里。
答案 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;
}