【发布时间】:2016-08-14 12:11:50
【问题描述】:
我正在尝试使用 C 编程语言做练习 1-10。这个想法是创建一个输出等于输入的程序,但是,如果打印一个选项卡,它应该打印\t 而不是实际的选项卡。它还建议对退格/反斜杠做同样的事情,但我试图让它在前进之前只使用一个选项卡。
我确定一个选项卡的值是 9,所以我想出了这个代码。我对为什么这不起作用感到困惑-这似乎是解决问题的直接方法。如果字符 getchar 接收到的值等于 9,这是一个制表符,然后以纯文本输出 \t。我很想被打在头上,因为无论是什么导致我用以下代码吠叫错误的树。我看到一些人发布了解决方案here,但我仍然对导致此失败的小细节感到困惑。
#include <stdio.h>
main(){
int c;
while ((c = getchar()) != EOF) {
if ((c == '\t') == 9) putchar("\t");
else purchar(c);
}
}
这会带来以下编译错误
tenth.c: In function 'main':
tenth.c:7:35: warning: passing argument 1 of 'putchar' makes integer from pointe
r without a cast
if ((c == '\t') == 9) putchar("\t");
^
In file included from tenth.c:1:0:
c:\mingw\include\stdio.h:645:43: note: expected 'int' but argument is of type 'c
har *'
__CRT_INLINE __cdecl __MINGW_NOTHROW int putchar(int __c)
^
C:\Users\*\AppData\Local\Temp\ccC4FPSb.o:tenth.c:(.text+0x18): undefined ref
erence to `purchar'
collect2.exe: error: ld returned 1 exit status
我也试过
main(){
int c;
while ((c = getchar()) != EOF) {
if (c == '\t') putchar("\t");
else purchar(c);
}
}
【问题讨论】:
-
请注意,您应该至少按照旧 (C99) 标准进行编码,最好是新 (C11) 标准。两者都不允许
main()(尽管 C89/C90 这样做,出于必要);两个较新的标准都要求显式指定返回类型 — 当您不打算使用命令行参数时,建议使用int main(void)。如果您的编译器没有对此发出警告,请添加警告标志以使其发出警告 - 或获得更好的编译器。 -
谢谢!我将更改我的代码以从正确的格式开始。
-
main()函数有两个有效签名 两个签名的返回类型均为int在当前场景中建议使用:int main( void ) -
这个表达式:
((c == '\t') == 9)表示如果 'c' 等于 at tab(这将设置一个真/假条件),那么它说这个真/假条件是否等于 9。建议:(c == '\t') -
发布的代码如果一致缩进会更容易阅读/理解。在每个左大括号“{”后缩进。在每个右大括号 '}' 之前取消缩进。
标签: c