我需要编写一个程序,从输入中读取(可能)多行文本。该程序需要使用scanf和printf,以及没有其他库函数(所以没有fgets,getchar或其他任何东西。
我知道可以使用以下内容阅读一行:
scanf("%[^\n]s", text);
但是留下了\ n,其中:
a)需要添加到名为text
的数组的末尾和
b)阻止其他输入行被读入。
这是我到目前为止的代码
void print_line()
{
int i = 0;
while(i < 12)
{
char input_text[100];
/*printf("Input text here: ");*/
/*scanf("%[^\n]s\n", input_text);*/
/*EDIT */
scanf("%99[^\n]", input_text);
/*Can't use fgets*/
/*fgets(input_text, 100, input);*/
printf("Text: %s", input_text);
i++;
}
}
我已经运行它,它只读取文件的第一行并重复12次。
编辑: 有人建议我试试这个:
scanf(" %99[^\n]", input_text);
哪种工作方式,它在所有输入行中读取,但它将它们全部读成一行,忽略换行符和缩进字符(空格,制表符等)。
答案 0 :(得分:0)
请阅读fields
的手册页。删除格式字符串中的scanf
。检查返回值是否为。
答案 1 :(得分:0)
这将尝试读取换行符然后读取换行符。如果result
为零,则流中会出现换行符,if
会尝试读取换行符。
char input_text[100];
char newlines[100];
int result = 0;
do {
result = scanf("%99[^\n]%99[\n]", input_text, newlines);//scan line to newline then trailing newline
if ( result == 0) {
result = scanf("%99[\n]", newlines);//scan leading newline
}
if ( result == 1) {
printf("Text: %s\n", input_text);//no newline so print line with newline
}
if ( result == 2) {
printf("Text: %s%s", input_text, newlines);//print line and newlines
}
} while ( result != EOF);