我正在尝试编写一个程序,将其输入复制到其输出。我假设如果给我以下字符串:"Hello I am /c“,它应该输出:"Hello \t am \c”,我说对了吗?
我尝试在网上阅读有关stdio.h库的内容。
#include <stdio.h>
/* Write a program to copy its input to its output, replacing each tab by \t, each backspace by \b, and each backslash by \\. This makes tabs and backspaces visible in an unambigous way.*/
int main()
{
char c;
while ((c = getchar()) != EOF){
if ((c = getchar()) == '\t'){
putchar('\t');
}
if (c == '\b'){
puts("\b");
}
if (c == '\\'){
puts("\\");
}
putchar(c);
}
}
请帮助我进一步理解这个问题,并解释为什么我的代码不能工作。
发布于 2019-06-24 08:46:23
有两个问题。首先:
while ((c = getchar()) != EOF){
您应该将getchar()
的返回值与EOF
进行比较。在这里,我们将c
与EOF
进行比较。这是不正确的,因为c
是一个char
,而getchar
返回一个int
。因此,您应该将int
与EOF
进行比较,并将char
与EOF
进行比较。这是错误的。
第二:
if ((c = getchar()) == '\t'){
你为什么又打电话给getchar
?你不会想读另一个字符的。
发布于 2019-06-25 04:39:20
#include <stdio.h>
/* Write a program to copy its input to its output, replacing each tab by \t, each backspace by \b, and each backslash by \\. This makes tabs and backspaces visible in an unambigous way.*/
// c is a char and getchar returns an int
int main()
{
char c;
while ((c = getchar()) != EOF)
{
if (c == '\t'){
//putchar('\t');
printf("\\t");
}
else if (c == '\b'){
printf("//b");
//puts("\b");
}
else if (c == '\\'){
printf("\\\\");
// no, this is gay(Ruby code) -> puts("\\");
} else {
putchar(c);
}
}
}
我的代码也是类似的--我只是忘记了我也可以用C语言编写()`,而不是使用更严格的putchar()函数。
https://stackoverflow.com/questions/56728692
复制相似问题