为什么我用c语言扫描任何char的int变量和%d的printf它必须显示2?

时间:2013-10-07 10:37:32

标签: c variables printf scanf

我的代码是

#include <stdio.h>
int main()
{
    int name;
    scanf("%d",&name);
    printf("%d",name);
}

为什么当我输入“你好”,“世界”,“好”等时,它必须显示2? 为什么2不是其他数字? 如果我想扫描字符串和printf的ASCII码,我该怎么办? 三江源

3 个答案:

答案 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的返回值,当您输入看起来不像数字的内容时,很可能会返回错误(例如HelloWorldGood都是无效输入。)

这意味着变量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-

编辑:

正如评论中的好人所指出的那样......确保数组大小定义为您认为输入大小永远不会超过的某个值...

相关问题