我的代码是
#include <stdio.h>
int main()
{
int name;
scanf("%d",&name);
printf("%d",name);
}
为什么当我输入 "Hello","World","Good" 等时它必须显示 2 ?为什么 2 不是其他数字?如果我想扫描字符串并打印它的 ASCII 码,我应该怎么做?谢谢你
为什么当我输入 "Hello","World","Good" 等时它必须显示 2 ?为什么 2 不是其他数字?
这只是因为它正在调用未定义的行为。你会得到任何东西。有时它会给出你想要的输出。有时它会给出我想要的输出。有时它不会给出任何人想要的输出。
如果我想扫描字符串并打印它的 ASCII 码,我应该怎么做?
使用getchar
函数“逐个字符”读取字符串,然后使用说明符打印每个字符的 ASCII 值%d
。
#include <stdio.h>
int main()
{
char name;
while((name = getchar()) != '\n')
printf("%c\t%d\n",name,name);
}
注意:看,在我的代码中我没有使用数组来存储字符串。您的字符串可以是任意长度。
scanf
当您输入看起来不像数字的内容(例如Hello
, World
,Good
都是无效输入)时,您没有检查最有可能返回错误的返回值。
这意味着该变量name
没有被写入,因此您的printf
调用实际上表现出未定义的行为(通过访问未初始化的变量),这可能解释了您的2
.
但请记住,因为您正在调用未定义的行为,所以从技术上讲,您可以得到任何东西(它不一定是2
)。
要打印输入字符串的 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-
编辑:
正如评论中的好人所指出的那样...确保为您认为输入大小永远不会超过的某个值定义数组大小...