gpt4 book ai didi

c - putchar 在最后一个字符后打印垃圾

转载 作者:行者123 更新时间:2023-11-30 16:19:14 26 4
gpt4 key购买 nike

我的 putchar() 函数在求和后返回垃圾。

这是我的代码片段:

scanf("%d", & keys);
getchar();
while ((c = getchar()) != EOF)
{
c = c + keys;
putchar(c);
}
puts("");

最佳答案

如果我明白你要去哪里,你的问题(最后的有趣字符)是由于你添加了 c = c + keys; 导致字符值大于 126(例如 '~' 字符)。例如,如果您的 keys 大于 4 并且您输入 'z',则生成的 c + keys > 超出了 ASCII 字符的有效范围。请参阅ASCII Table and Description

根据您想要执行的操作,您可以简单地使用 %(模)来确保在调用 putchar() 之前始终具有有效的 ASCII 字符。像这样的东西:

    while ((c = getchar()) != EOF) {
c = (c + keys) % ('~' - ' ' + 1) + ' '; /* use modulo to ensure ASCII */
putchar (c);
}

(注意: '~' - ' ' + 1 只是 ASCII 值的可打印范围 - 95 字符 - 谢谢 Roland )

将一个简短的示例程序的猜测放在一起,您可以这样做:

#include <stdio.h>

/* simple helper function to remove to end of line */
void empty_line (void)
{
int c = getchar();

while (c != '\n' && c != EOF)
c = getchar();
}

int main (void) {

int c, keys;

if (scanf("%d", & keys) != 1 || keys < 0) { /* Validate EVERY Input! */
fputs ("error: invalid or negative integer input.\n", stderr);
return 1;
}
empty_line();

while ((c = getchar()) != EOF) {
c = (c + keys) % ('~' - ' ' + 1) + ' '; /* use modulo to ensure ASCII */
putchar (c);
}
putchar ('\n'); /* not puts, you need 1-char, not string */
}

(注意:您必须验证每个输入,尤其在使用scanf时> 执行到 int 的转换——或任何其他类型)

示例使用/输出

$ ./bin/putcharmod
33
My dog has zero fleas, my cat has none :)
/[aFQIaJCUa\GTQaHNGCUmaO[aECVaJCUaPQPGa{jK

在上面,尽管 keys = 33,但输入 'z' 不会产生有趣的字符,因为 c + keys 总数减少为在可打印字符范围内。

当然,调整方案以满足您的最终目标,但无论如何,如果您使用 putchar() 输出到 stdout,您将需要执行类似的操作以确保输出的内容可打印。

如果您还有其他问题,请告诉我。

关于c - putchar 在最后一个字符后打印垃圾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55671485/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com