Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何打印分号(;),而不在程序中使用分号?_C++_C - Fatal编程技术网

C++ 如何打印分号(;),而不在程序中使用分号?

C++ 如何打印分号(;),而不在程序中使用分号?,c++,c,C++,C,一位面试官要求我编写代码,在代码中不使用分号的情况下打印分号。这怎么可能呢?这是一个更为C++的版本: #包括 int main(){ (STD::CUT试试)。在C++和C(C99模式)中工作: 说明:分号使用ASCII码,分号为59,为避免分号,请将语句putchar(59)放入在if的条件表达式中使用空体。当条件表达式求值时,它将打印;。这里注意main的返回类型是int,但我不返回任何内容,以避免在return语句中使用;,因为您可以省略返回0;frommain符合C99规范。 请参见此

一位面试官要求我编写代码,在代码中不使用分号的情况下打印分号。这怎么可能呢?

这是一个更为C++的版本:

#包括
int main(){

(STD::CUT

试试)。在C++和C(C99模式)中工作:

说明:分号使用ASCII码,分号为
59
,为避免分号,请将语句
putchar(59)放入
if
的条件表达式中使用空体。当条件表达式求值时,它将打印
。这里注意
main
的返回类型是
int
,但我不返回任何内容,以避免在
return
语句中使用
,因为您可以省略
返回0;
from
main
符合C99规范。
请参见此处的运行代码:,。

尝试以下代码:

int main()
{
    if(printf("%c",59)) //59 is ascii value of semicolon
    {}
}

我不相信有任何100%便携的方法可以做到这一点

对于使用基于ASCII或基于EBCDIC字符编码的任何符合标准的托管C实现,以下行为应适用于定义良好的行为:

#include <stdio.h>
int main(void) {
    if ('z' - 'a' == 25) {
        if (printf("%c\n", 59)) { }
    }
    else {
        if (printf("%c\n", 94)) { }
    }
}
#包括
内部主(空){
如果('z'-'a'==25){
如果(printf(“%c\n”,59)){}
}
否则{
如果(printf(“%c\n”,94)){}
}
}

我相信它也是有效的C++,虽然不是很好的C++(我会用<代码> STD::CUT),并且改变<代码>(空)<代码> > <代码>()/> > < < 注:

  • #include
    对于避免C90中的
    printf
    调用上的未定义行为是必需的。在C99或更高版本中,调用没有可见声明的
    printf
    是违反约束的
  • '\n'
    对于避免某些实现上的未定义行为是必需的。文本流是否需要最后一行末尾的
    '\n'
    是由实现定义的。对于需要它的实现,如果未能提供,则具有未定义的行为
  • 在C90中,省略
    return
    语句会导致
    main
    向环境返回未定义的终止状态。在C99或更高版本中,它相当于
    return 0;
  • ('z'-'a'==25)
    测试旨在检测ASCII与EBCDIC。在ASCII中,26个小写字母是连续的;在EBCDIC中,它们不是连续的。对于使用与ASCII或EBCDIC不兼容的字符集的实现,此程序将失败。添加一些测试可能允许检测此类字符集,但没有好的方法我从来没有听说过一个C实现使用的字符集与ASCII或EBCDIC都不兼容(至少就这些特定字符而言),所以这在实践中不应该是一个问题
  • 我还没有在EBCDIC实现上测试过这一点。
    的值
    94
    是从中派生出来的

当然,除了作为一个有趣的谜题,没有什么好的理由这么做。像“不要使用分号”这样的限制在现实编程中没有任何意义。即使分号键已损坏,您也可以从其他来源复制和粘贴分号,直到您可以修复或更换键盘。但如果您需要生成可以复制和粘贴的分号,此程序可能会很有用。幸运的是,大多数操作系统都应该允许您编辑、复制和粘贴分号mpile,运行一个简单的C程序,而不需要使用分号键。

我知道的三种方法可以获得与

printf(";");
putchar(';');
printf("%c",';');
它们(对应)如下

printf("\u003B");
putchar(0x3B);
printf("%c",0x3B);

使用ascii码:这个问题对于stackoverflow来说太宽泛了,有无数种方法可以打印
,而无需在源代码中明确说明。只有知道答案时才宽泛。OP显然不是这样,所以我们应该启发他,而不是责骂他。我认为专业和热心的开发人员应该现在99.99%的处理器只处理二进制指令和数据,所以更好的问题是“如何打印分号(;)使用一个不理解分号的处理器。这怎么可能呢?’这是一个诚实的问题,不是一场竞赛。OP显然不知道字符可以用其他方式表示。这可能是一个很好的暗示,让面试官知道OP是一个没有经验的开发人员,但我们仍然可以启发他。我发现你缺少家长“昆廷很不安。”这种干扰只是一个错误。好的C++可能使用分号,而不是空块。P@djechlin:咯咯笑——但是任何语言中的“好”代码都需要解决它应该解决的问题。你能可靠地预测一个接近分号的字符吗?例如:“:”-1如果你输出程序“int main(){返回0$char}”如果$char在1、…、255上迭代,请尝试编译它,然后查看编译的是哪一个。@djechlin:否。标准仅保证
'0'
'9'
是连续的,并且基本执行字符集的所有成员都是非负的。您可以映射出基本执行字符集的所有成员,而不是
';
但这只会将“
”;“
的可能值缩小到几种可能性。(在实践中,假设ASCII或EBCDIC可能涵盖100%的实际实现。)您不应该使用分号(;)在代码中。你的意思是不结束一个陈述吗?你错过了问题的全部要点!!其他答案解决了它。
printf(";");
putchar(';');
printf("%c",';');
printf("\u003B");
putchar(0x3B);
printf("%c",0x3B);