4

我的任务是检查用户输入并用感叹号替换每个句点,每个感叹号用 2 个感叹号替换,然后计算替换的次数。

这是我的代码:

int main(void)

{

    int userInput, substitutionsNum = 0;

    printf("please enter your input:\n");
    while ((userInput = getchar()) != '#')
    {
        if (userInput == '.')
        {
            userInput = '!';
            ++substitutionsNum;
        }

        else if (userInput == '!')
        {
            userInput = '!!';
            ++substitutionsNum;
        }
    }

    printf("%c, the number of substitutions are: %d", userInput, substitutionsNum);
    return 0;
}

如果我输入“nir”。然后“#”退出程序,输出为“#,替换次数为:1”

4

3 回答 3

2

除了最后一次之外,您永远不会将输入打印出来,因此“替换”将不起作用。

此外,您不能将一对感叹号表示为'!!',这是一个不同的多字符文字。至少,如果您尝试打印它,那么没有任何 I/O 函数可以满足您的期望。

于 2013-01-28T14:16:54.210 回答
1
!! 

是两个字符。你假设它是一个单一的字符。

你正在覆盖同一个变量中的userInput

您可以再使用一个 char 缓冲区,以便您可以根据需要调整索引。例如,当您要存储“!!”时,要增加两个索引。

于 2013-01-28T14:17:33.227 回答
0

你这样做是不对的。您需要将累积的更改输入存储在字符数组(即char buffer[1024])中并将替换项放在那里。使用您的算法,您唯一要打印的是userInput变量的最后一个值。

由于这可能是家庭作业,我建议您阅读更多关于C 语言中的字符串操作的信息。

于 2013-01-28T14:16:38.757 回答