请考虑以下代码: -
#include"stdio.h"
void main()
{
char ch;
while((ch=getchar())!=EOF)
{
putchar(ch);
}
}
无论我给出什么输入(作为一个句子),在我按下返回键后重复它。如果我想在最后得到整个段落,我该怎么办?可以使用putchar()
完成此操作,因为putchar()
只能用于返回单个字符。
答案 0 :(得分:2)
这不起作用,因为EOF
不适合char
。请注意,getchar()
的正确返回类型为int
。例如,请参阅this manual page。
如果要一次读取整行,可以将fgets()
用于字符缓冲区。我不确定我是否完全理解你想要达到的目标。
答案 1 :(得分:1)
从文件读取时应使用EOF,因为文件以特殊的EOF(文件结尾)字符结尾。您需要在此使用任何标记来表示输入的结尾。
这个程序很有意义,我无法想象在任何地方使用它。因此,重新考虑要求并相应地改变逻辑。
答案 2 :(得分:1)
这段代码可以帮助你
char *buffer;
int i = 255;
buffer = (char *)malloc(i*sizeof(char));
*buffer = getchar();
while ( *buffer != '?' )
{
buffer++;
*buffer = getchar();
}
答案 3 :(得分:1)
尝试将char存储到缓冲区中,并在退出while循环时打印缓冲区。试试这段代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int c;
char *buf = calloc(1,sizeof(char));
int len;
while ((c=getchar())!=EOF) {
len = strlen(buf);
buf = realloc(buf, len+1);
buf[len] = (char) c;
buf[len + 1] = '\0';
}
printf("%s",buf);
}
答案 4 :(得分:1)
如果你想在结尾处获得整个段落,你应该在EOF到达时将输入存储在缓冲区中。然后在循环中打印缓冲区的内容。另外,正如Unwind先生的answer说make,ch
变量为int
,char错了!
#include"stdio.h"
#define SIZE 1024
void main()
{
int buffer[SIZE]
int ch;
int i=0;
// Read and store in a buffer
while((ch=getchar())!=EOF)
{
buffer[i] = ch;
i++;
}
buffer[i] = EOF;
// now print using putchar(ch);
i = 0;
while((ch = buffer[i]) !=EOF)
{
putchar(ch);
i++;
}
}
答案 5 :(得分:-1)
cose我们在console / terminal中所做的一切 - 直到我们没有点击Enter / Return / ^ J / ^ M shell没有发送到我们程序的行
你可以通过复制并粘贴一些行来获得段落(超过1行),以便终端|控制台程序显示第一个你粘贴然后重复 - 输出你的程序