我的代码是
#include <stdio.h>
int main()
{
int name;
scanf("%d",&name);
printf("%d",name);
}
为什么当我输入“你好”,“世界”,“好”等时,它必须显示2? 为什么2不是其他数字? 如果我想扫描字符串和printf的ASCII码,我该怎么办? 三江源
答案 0 :(得分:0)
为什么当我输入“你好”,“世界”,“好”等时,它必须显示2?为什么2而不是其他数字?
这只是因为它正在调用未定义的行为。你会得到任何东西。有时它会给你想要的输出。有时它会给出我想要的输出。有时它不会给出任何人想要的输出。
如果我想扫描字符串和printf的ASCII码,我该怎么办?
使用getchar
函数逐个字符地读取字符串',然后使用%d
说明符打印每个字符的ASCII值。
#include <stdio.h>
int main()
{
char name;
while((name = getchar()) != '\n')
printf("%c\t%d\n",name,name);
}
注意:在我的代码中,我没有使用数组来存储字符串。你的字符串可以是任何长度。
答案 1 :(得分:0)
您没有检查scanf
的返回值,当您输入看起来不像数字的内容时,很可能会返回错误(例如Hello
,World
, Good
都是无效输入。)
这意味着变量name
未被写入,因此您的printf
调用实际上表现出未定义的行为(通过访问未初始化的变量),这可能解释了2
的输出。
请记住,因为你正在调用未定义的行为,所以你在技术上可以得到任何东西(它不一定是2
)。
答案 2 :(得分:0)
打印输入字符串的ascii值:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
char array[100];
int i=0;
printf("Enter string : ");
scanf("%s",array); // fixed as suggested in comments
for(i=0;i<strlen(array);i++){
printf("%d-",array[i]);
}
printf("\n");
return 0;
}
此代码的输出:
Enter string : hello
104-101-108-108-111-
编辑:
正如评论中的好人所指出的那样......确保数组大小定义为您认为输入大小永远不会超过的某个值...