我必须在C中编写一个程序来处理换行符作为字符串的一部分。我需要一种处理换行符的方法,如果遇到它,它不一定终止输入。到目前为止,我一直在使用fgets()但是只要它到达'\ n'字符就会停止。是否有一个很好的功能来处理来自控制台的输入,但不一定以换行符结尾?
澄清一下:我需要一个不会在换行符char处终止的方法,因为在这个特殊的练习中遇到换行符时它被替换为空格char。
编辑:如果不是很明显,我是C的完全新手
答案 0 :(得分:2)
fgets
从流中获取一行。一行定义为以换行符,文件结尾或错误结尾,因此您不希望这样。
您可能想要使用fgetc
。这是c程序文件fgetc.c
#include <stdio.h>
int main (void) {
int c;
while ((c = fgetc(stdin)) != EOF) fputc(c, stdout);
}
像这样编译:
cc fgetc.c -o fgetc
像这样使用(注意换行符'\ n'):
echo 'Hello, thar!\nOh, hai!' | ./fgetc
或者像这样:
cat fgetc.c | ./fgetc
阅读fgetc功能手册以了解更多信息:man fgetc
答案 1 :(得分:2)
如果我正确理解你的问题,你想从标准输入中读取,直到用户完成输入(当然不是新行)。这可以通过在获取输入时设置EOF等标志来完成。我提出的一个方法是:
#include <stdio.h>
int main(void)
{
char ch;
char str[100];
int i = 0;
setbuf (stdout,NULL);
while ( (ch = getchar()) != EOF)// user can input until the EOF which he or she enters to mark the end of his/her typing or more appropriately input.
{
str[i] = ch;// you can store all the input character by character in a char array
i++;
}
printf ("%s",str);// then you can print it at last as a whole
return 0;
}
BEGINNER的注意事项 - EOF因系统而异,因此请检查并为您的系统输入正确的EOF。
答案 2 :(得分:1)
如果您只是在不需要scanf()
的情况下阅读信息块,那么fread()
可能就是您所追求的。但是在游戏机上你可以读到\ n,注意\ n,然后继续阅读更多内容,如果你认为\ n不适合你。
答案 3 :(得分:1)
scanf
按指示使用时有效。具体来说,它将\ n视为空格。
根据应用程序的编码方式(即如何定义缓冲区),\n
会提示系统刷新缓冲区并将数据提供给scanf
。这应该作为默认情况发生,您无需做任何事情。
所以真正的问题是,你需要从控制台获得什么样的数据或字符?在某些情况下,scanf
将删除空格,而不会将空格,制表符,新行传递到您的程序中。但是,scanf
可以编码为不执行此操作!
定义如何输入数据,我可以指导您如何编码scanf。