2012-10-18 267 views
1

我刚刚开始学习如何在C中编程,并且我正在试图编写一个程序来接受一个数字,并将其用作ASCII值以返回与该值关联的ASCII字符。将ASCII码转换为字符值

该程序在预定义参数时起作用,但是当我引入scanf函数时,它会编译但不会给我相同的结果。

这里是我的代码:

#include <stdio.h> 

int main(void) 
{ 
    question2(); 
    return 0; 
} 

int question2(void) 
{ 


    int myInt = 65; 

    scanf("%d", myInt); 
    char ch = myInt; 

    printf("%c",ch); 

    return 0; 
} 

欢呼和感谢所有帮助球员。

+4

请打开编译器的警告,并仔细阅读。 – Mat

+0

另外,打开调试信息。在Linux上,你应该使用'gcc -std = c99 -Wall -g yourcode.c -o yourprog'进行编译,然后使用'gdb。/ yourprog'进行调试。 –

+0

@Mat我使用的是使用TDM-GCC 4.6.1的Dev-C++,但是我没有看到警告,尽管我期待它。有趣。 –

回答

3

你需要传递的myIntscanf()地址(编译器应该发出警告此):

scanf("%d", &myInt); 

您还应该检查的scanf()的返回值,以确保myInt实际分配至。 scanf()返回任务所做的数量,在这种情况下,预计将1

if (1 == scanf("%d", &myInt)) 
{ 
} 

注意int具有比char更大范围的值,所以你应该检查存储在myInt值将适合成为char。有在头limits.h,你可以用它来检查定义的宏:

if (1 == scanf("%d", &myInt)) 
{ 
    if (myInt >= CHAR_MIN && myInt <= CHAR_MAX) 
    { 
     printf("%c\n", (char) myInt); 
    } 
    else 
    { 
     printf("%d out-of-range: min=%d, max=%d\n", 
      myInt, CHAR_MIN, CHAR_MAX); 
    } 
} 

编译器应该也发出了隐函数声明相对于question2()警告。若要更正,请在main()之前加上question2()的定义或question2()的声明。

+0

叶那工作感谢!正如你所解释的,我认为我试图通过变量本身而不是地址。欢呼的伴侣 – alexeidebono