如何使用scanf(而不是fgets)读取文本行?

时间:2017-09-18 17:38:50

标签: c scanf

我需要编写一个程序,从输入中读取(可能)多行文本。该程序需要使用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);

哪种工作方式,它在所有输入行中读取,但它将它们全部读成一行,忽略换行符和缩进字符(空格,制表符等)。

2 个答案:

答案 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);