我正在努力教自己C,因为你可能已经听过很多次了,我无法弄清楚我做错了什么。我正在做的练习的目的是用指定数量的空格替换制表符。它应该是unix命令扩展的模仿。这是我到目前为止所做的:
#include <stdio.h>
int main (int argc, char *argv[])
{
int spacecount = atoi(argv[2]);
int i, d, b, g, toput;
char string[1000];
for (d = 0, b = 0; (string[d + b] = getchar()) != EOF; d++) {
if (string[d + b] = '\t') {
toput = d % spacecount;
for (i = 0; i < toput; i++) {
if (string[d + b] = '\n')
i = toput;
string[d + b] = ' ';
b++;
}
}
}
g = d;
putchar('\n');
for (d = 0; d < g; d++)
putchar(string[d]);
putchar('\n');
}
我运行它并将开始输入,通过按ctrl + d完成,(因为我使用的是GNU / Linux)并让它打印垃圾字符。我用另一个字符串尝试了相同的第二个for循环,一个在没有if语句的for循环中分配了getchar(),并且它打印了非垃圾字符。我想我真的很困惑。我做错了什么?
答案 0 :(得分:3)
在编译器中启用警告,它确实应该为您提供此代码的警告。
(string[d + b] = '\t')
应为(string[d + b] == '\t')
。
使用gcc -std=c99 -pedantic-errors -Wall
进行编译。
答案 1 :(得分:0)
问题是您要使用=
运算符而不是==
进行比较。 =
是一个asign运算符,您无法使用它来比较两个元素。
所以使用
if (string[d + b] == '\t')
而不是
if (string[d + b] = '\t')
也可以使用
if (string[d + b] == '\n')
而不是
if (string[d + b] = '\n')