Closed. This question is off-topic。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
                        
                        5年前关闭。
                                                                                            
                
        
这是代码(复制并粘贴):

#include <stdio.h>
int main(){
    char x,y,result;
    //Sample 1:
    x =  35;
    y =  85;
    result =  x + y;
    printf("Sample 1: %hi + %hi = %hi\n",x ,y, result);
    //Sample 2:
    x =  85;
    y =  85;
    result = x + y;
    printf("Sample 2: %hi + %hi = %hi\n",x ,y, result);
return 0;
}


我尝试编译它,但是它不起作用。我是愚蠢的还是开始时是“ int”或“ short”而不是char?一旦我更改了它,它就会起作用,但是我担心它应该照原样工作...
该程序真的只将x和y相加并显示结果吗?如果我使用short而不是char,那就是这样做的。

提前致谢!

E:为什么要投反对票?我的帖子有什么问题?

最佳答案

想法:

对于入门课程,这是一个糟糕的例子。根据您的实现,char是带符号或无符号的数字。根据这一事实,代码的行为将有很大不同。

就是说,是的,这段代码基本上是将两个数字相加并打印结果。我同意%hi是奇怪的。这需要一个short int。我个人希望%hhi或只是%i,让整数提升做到这一点。

如果数字是未签名的字符


85 + 35 == 120,可能小于CHAR_MAX(可能为255)。因此没有问题,一切正常。
85 + 85 == 170,可能小于CHAR_MAX(可能为255)。因此没有问题,一切正常。


如果数字是带符号的字符


85 + 35 == 120,可能小于CHAR_MAX(可能为127)。因此没有问题,一切正常。
85 + 85 == 170,可能大于CHAR_MAX。这会导致有符号整数溢出,这是未定义的行为。

关于c - 任务:描述以下C程序做什么? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26633580/

10-11 16:45