注册 登录
编程论坛 C语言论坛

大佬们这个怎么解决?

xxnff 发布于 2020-09-23 23:34, 1535 次点击
如下欲输出ASCII编码及对应的字符,但程序中出现了“永真循环”(俗称“死循环”)。请指出原因,并修改(请给出至少2种修改方案)。

 // ASCII.cpp
#include <iostream>
using namespace std;

int main()           // 为什么出现永真循环? 如何修改?
{
    unsigned  char c;
    for(c=0;  c<256; c++)
        cout << int(c) << '\t' << c << endl;
                     // 表达式int(c)为将c的值临时强制转换成指定的int类型
    return  0;
}
3 回复
#2
nosnoy2020-09-24 16:10
把int 换成unsigned int 试试;
cout << int(c) << '\t' << c << endl;

话说c++ 的代码必须这样写吗
就不能写成
cout << int(c);
cout << '\t' ;
cout << c ;
cout << endl;
这样吗 ,讲道理我还真没写过c++  哈哈
还是printf(“%u,%c/n”,uint(c),c);这样比较好看

[此贴子已经被作者于2020-9-24 16:18编辑过]

#3
lin51616782020-09-24 16:20
unsigned  char 常见实现是8bit
最大值 255
(unsigned  char)255 + 1是0
所以 c<256 永远成立
所以 死循环

修改就简单了
换类型/强制转换/循环到254 单独输出 255/只处理到128
#4
rjsp2020-09-24 17:02
在C论坛,贴的却是C++代码,那么别人应该用C代码回复你,还是用C++代码回复你?

程序代码:
#include <stdio.h>
#include <locale.h>
#include <ctype.h>
#include <limits.h>

int main( void )
{
    setlocale( LC_CTYPE, "C" ); // 没有这一句的话,输出可能也是正确的,但未必一定是正确的

    for( int ch=0; ch<=UCHAR_MAX; ++ch ) // unsigned char 的最大值未必是255
    {
        if( isprint(ch) ) // 控制字符的行为依赖于平台实现
            printf( "value=0x%02hhX, graph=\'%c\'\n", ch, ch );
        else
            printf( "value=0x%02hhX\n", ch );
    }
}
1