【问题标题】:How to read a line using scanf() in C?如何在 C 中使用 scanf() 读取一行?
【发布时间】:2019-05-21 09:03:10
【问题描述】:

我需要使用 scanf() 读取一行作为输入,然后使用 printf() 打印它。 我尝试使用scanf("%[^\n]%*c",sen);

printf("%[^\n]%*c", sen);

这是我得到的输出:

 %[^
]

谁能指出我错了什么?

以下代码将采用三个输入,一个字符、一个字符串和一行。之后,只需打印三个数据。但我在使用scanf() 阅读该行时遇到问题。

  { 
    char ch,s[10],sen[25];

    scanf("%c",&ch);
    scanf("%s",s);
    scanf("\n");
    scanf("%[^\n]%*c",sen);

    printf("%c\n",ch);
    printf("%s\n",s);
    printf("%[^\n]%*c", sen);
  }

预期的输出将如下所示:

C
Language
Welcome To C!!

我得到了什么:

C
Language
 %[^
]

【问题讨论】:

  • 为什么需要使用scanf?
  • printf("%[^\n]%*c", sen);-->printf("%s", sen);
  • @Broman 这是一个挑战。我只能使用 scanf() 和 printf()。
  • scanfprintf有一些相似之处,但需要分别研究。
  • scanf读一行就像用螺丝刀钉钉子一样。你也许可以让它大部分工作,但这是一个毫无意义的练习,而且完全不适合这项工作。

标签: c


【解决方案1】:

当使用 printf() 显示用户的输入时,您使用普通的 "%s" 符号,"%[^\n]%*c" 仅与 scanf() 一起使用,因为此函数只接受输入直到第一个空格。

所以当使用 printf() 显示时,你的代码应该是这样的:

printf("%s", sen);

【讨论】:

    【解决方案2】:

    继续逐个输入字符,直到找到换行符('\n')。

    #include <iostream>
    using namespace std;
    
    int main() {
        char s[100],c;
        int len=0;
    
        while(scanf("%c", &c)==1) { //==1 is to ensure you have not reached end of file(EOF)
            if(c== '\n')
                break;
            s[len++]=c;
        }
        s[len] = '\0'; //to mark end of the string.
        printf("%s\n", s);
        return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 2013-06-22
      • 1970-01-01
      • 1970-01-01
      • 2013-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-15
      相关资源
      最近更新 更多