【发布时间】:2018-04-14 08:14:28
【问题描述】:
我编写了这个程序,用“*”替换两个空格。
如何修改代码以使其无论字符串大小如何都能执行相同的操作?甚至可以只使用putchar和getchar吗?
#include <stdio.h>
int c;
char buffer[256];
int counter= 0;
int i;
int main()
{
while ((c = getchar()) != '\n'&&c!=EOF) {
buffer[counter] =c;
counter++;
if (counter >=255) {
break;
}
}
for(i=0; i<256; i++) {
if(buffer[i]== ' '&&buffer[i+1]==' ')
{
buffer[i]= '*';
putchar(buffer[i]);
i = i + 2;
continue;
}
putchar(buffer[i]);
}
putchar('\n');
return 0;
}
【问题讨论】:
-
小心,
getchar返回一个int,这对于EOF检查实际上很重要。您可能也不应该将EOF放在缓冲区中。请记住,如果输入的行小于 256 个字符,那么buffer的其余元素将是 indeterminate (并且看似随机),并且在打印输入时不应使用 then。 -
所以我已经编辑了代码,但我仍然不清楚我应该如何实现代码来读取和输入未知长度的字符串
-
您的编辑使您的 while 循环无限。
||应该是&&。否则,要打破循环c必须同时是'\n'和EOF,这是不可能的。 -
哦,谢谢。 @WhozCraig 你能否给我一个关于如何实现代码来做同样事情的提示,不管输入字符串的大小是多少?我只是不明白它应该如何工作
-
你为什么还要存储完整的输入?对于您的用例来说,大小为 2 的环形缓冲区还不够吗?
标签: c arrays if-statement input