1

我正在尝试自学 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() 的字符串,它打印非垃圾字符。我想我真的很困惑。我究竟做错了什么?

4

2 回答 2

3

在你的编译器中启用警告,它真的应该给你这个代码的警告。

(string[d + b] = '\t')应该是(string[d + b] == '\t')

用 编译gcc -std=c99 -pedantic-errors -Wall

于 2013-05-24T14:03:47.743 回答
0

问题是您正在比较 using=运算符而不是==. =是一个赋值运算符,你不能用它来比较两个元素。

所以用

if (string[d + b] == '\t')

代替

if (string[d + b] = '\t')

也使用

if (string[d + b] == '\n')

代替

if (string[d + b] = '\n')
于 2013-05-24T14:07:52.307 回答