C 意外的while循环(字符到整数的转换) #包括 main() 字符i=13; 而(i) { i++; } printf(“%d”,i); }

C 意外的while循环(字符到整数的转换) #包括 main() 字符i=13; 而(i) { i++; } printf(“%d”,i); },c,loops,while-loop,char,int,C,Loops,While Loop,Char,Int,结果是零。怎么会这样 #include<stdio.h> main() char i=13; while(i) { i++; } printf("%d",i); } #包括 main() 字符i=48; 如果(i) { printf(“%d”,i); } } 此程序成功运行并打印48。我不是被认为是一个应该失败的字符o吗?我如何作为字符或数字存储在内存中?if语句比较的是数值,而不是它恰好表示的ASCII字符。在第二个示例中,只有数值0会导致if无法执行。if语句比较数值,而不是

结果是零。怎么会这样

#include<stdio.h>
main()
char i=13;
while(i)
{
i++;
}
printf("%d",i);
}
#包括
main()
字符i=48;
如果(i)
{
printf(“%d”,i);
}
}

此程序成功运行并打印48。我不是被认为是一个应该失败的字符o吗?我如何作为字符或数字存储在内存中?if语句比较的是数值,而不是它恰好表示的ASCII字符。在第二个示例中,只有数值0会导致if无法执行。

if语句比较数值,而不是它恰好表示的ASCII字符。在第二个示例中,只有数值0会导致if无法执行。

在“main()”后面缺少一个括号。您的第一个代码实际上一直从13开始计数,直到达到127(如果在您的系统中,字符表示为有符号整数),因为这是这样一个系统中字符的最大正整数;然后切换到-128并继续计数到0。0时,退出循环并打印结果。要可视化发生的情况,请复制并尝试:

#include<stdio.h>
main()
char i=48;
if(i)
{
printf("%d",i);
}
   }
#包括
int main()
{
字符i=13;
而(i){
i++;
printf(“%d”,i);
}
printf(“\n%d”,i);
}
输出:

14151617171819220222324252727272722930231333334353637383940414244444444474950515255555657585960616263646667697071727476777879808182838586888990929394969910011011011011111111111111111111111211211211211211211211281818181818183858586878789899294994949494444454545455454545454555555557556565656568196969662626264656666717171717171717171717171717171122 123 124 125 126 127 -128 -127 -126 -125 -124 -123 -122 -121 -120 -119 -118 -117 -116 -115 -114 -113 -112 -111 -110 -109 -108 -107 -106 -105 -104 -103 -102 -101 -100 -99 -98 -97 -96 -95 -94 -93 -92 -91 -90 -89 -88 -87 -86 -85 -84 -83 -82 -81 -80 -79 -78 -77 -76 -75 -74 -73 -72 -71 -70 -69 -68 -67 -66 -65 -64 -63 -62 -61 -60 -59 -58 -57 -56 -55 -54-53-52-51-50-49-48-47-46-45-44-43-42-41-40-39-38-37-36-35-34-33-32-31-30-29-28-27-26-25-24-23-22-21-20-19-18-17-16-15-14-13-12-11-10-9-8-7-6-5-4-2-10


正负变化与计算机上整数的IEEE表示有关。如果你用谷歌搜索的话,你可以在网上找到很多相关的问题

在“main()”之后缺少一个括号。您的第一个代码实际上一直从13开始计数,直到达到127(如果在您的系统中,字符表示为有符号整数),因为这是这样一个系统中字符的最大正整数;然后切换到-128并继续计数到0。0时,退出循环并打印结果。要可视化发生的情况,请复制并尝试:

#include<stdio.h>
main()
char i=48;
if(i)
{
printf("%d",i);
}
   }
#包括
int main()
{
字符i=13;
而(i){
i++;
printf(“%d”,i);
}
printf(“\n%d”,i);
}
输出:

14151617171819220222324252727272722930231333334353637383940414244444444474950515255555657585960616263646667697071727476777879808182838586888990929394969910011011011011111111111111111111111211211211211211211211281818181818183858586878789899294994949494444454545455454545454555555557556565656568196969662626264656666717171717171717171717171717171122 123 124 125 126 127 -128 -127 -126 -125 -124 -123 -122 -121 -120 -119 -118 -117 -116 -115 -114 -113 -112 -111 -110 -109 -108 -107 -106 -105 -104 -103 -102 -101 -100 -99 -98 -97 -96 -95 -94 -93 -92 -91 -90 -89 -88 -87 -86 -85 -84 -83 -82 -81 -80 -79 -78 -77 -76 -75 -74 -73 -72 -71 -70 -69 -68 -67 -66 -65 -64 -63 -62 -61 -60 -59 -58 -57 -56 -55 -54-53-52-51-50-49-48-47-46-45-44-43-42-41-40-39-38-37-36-35-34-33-32-31-30-29-28-27-26-25-24-23-22-21-20-19-18-17-16-15-14-13-12-11-10-9-8-7-6-5-4-2-10


正负变化与计算机上整数的IEEE表示有关。如果你用谷歌搜索的话,你可以在网上找到很多相关的问题

首先正确缩进代码。第一个循环环绕到
i=0
。将
printf
移动到循环中以查看发生的情况。在第二个
printf
中,
i
%d
转换为int。使用
%c
将其打印为字符。如果代码缩进正确,则缺少的
{
是显而易见的。首先正确缩进代码。第一个循环环绕到
i=0
。将
printf
移动到循环中以查看是否发生这种情况。在第二个
printf
中,
i
%d
转换为int。使用
%c
将其作为字符打印。如果缩进如果您的代码正确,丢失的
{
将是显而易见的。C实现可能没有使用ACSII,我认为char I=48将是数字0。在ASCII(或UTF8)中,decimal 48是数字0的字符代码,但这并不重要。它比较的是整数值(本例中为48),而不是可能表示的任何字符。为此,请将char视为8位整数。C实现可能不使用ACSII。我认为char I=48将是数字0。在ASCII(或UTF8)中,十进制48是数字0的字符代码,但这并不重要。它比较整数值(本例中为48),而不是可能表示的任何字符。为此,请将char视为8位整数。“IEEE”通常指浮点表示的一组特定标准。整数表示可能有IEEE标准,但通常我们仅指2的补码“IEEE”通常指浮点表示的一组特定标准。对于整数表示可能有IEEE标准,但通常我们只指2的复数