【问题标题】:Why does this ask for three inputs when there are only two scanf calls?当只有两个 scanf 调用时,为什么这要求三个输入?
【发布时间】:2021-06-21 00:32:59
【问题描述】:

以下代码有两个scanf 调用,但是当我运行它时,它要求三个输入。我假设问题来自\n,但为什么呢?

#include <stdio.h>
#include <stdlib.h>

int main()
{
  char *s,*t;
  s=malloc(1024);t=malloc(1024);
  scanf("%s\n",s);
  scanf("%s\n",s);
  if(s==t)
  {
    printf("Same!\n");
  }
  else
  {
    printf("Different\n");
  }
}

【问题讨论】:

  • "它要求 3 个输入?"欠"\n"scanf("%s\n",s); --> scanf("%s",s);。更好的是,研究和使用fgets()
  • 它从哪里获得 3 个输入? BW 字符串比较需要strcmp
  • s==t 比较指针地址。不会一样的。
  • 哦,你是对的,没注意到,我只是在学习cs50练习课程

标签: c scanf


【解决方案1】:

我假设问题来自 \n,但为什么呢?

你说得对,这就是问题所在。

根据scanf的文档,格式字符串中的\n字符会导致scanf继续读取空白字符,直到遇到非空白字符。这意味着在你按下 ENTER 后,scanf 会等待你输入一个非空白字符,但它只会在你再次按下 ENTER 后接收到这个字符(假设您的操作系统一次向您的程序发送一行输入)。这很可能不是您想要的。

如果你想读取单行输入,我建议你改用fgets

请注意,%s scanf 格式说明符只会读取输入的单个单词,而 fgets 会读取整行输入。

【讨论】:

  • 感谢您的帮助,顺便说一句,您可以使用 %[^\n] 而不是 %s 来使用 scanf 获取整行
猜你喜欢
  • 1970-01-01
  • 2013-03-22
  • 2021-12-19
  • 1970-01-01
相关资源
最近更新 更多