无法 运行 一段代码从 C 中的用户获取不同类型的数据

Unable to run a piece of code to get different types of data from user in C

这个问题可能看起来很愚蠢,但我不习惯用 C 工作,我在这里失去了理智,不知道哪里出了问题。

基本上我想要的是从用户那里得到一个数字,然后是一个字符串,用户可以随便写,我只想保留那个字符串的第一个字符。

我的代码如下:

#include <stdio.h>

int main()
{
  int b, n;
  char frase [2];

  scanf("%d", &n);
    
  fgets(frase, 2, stdin);
  puts(frase);

  return 0;
}

我的问题是,在 fgets 程序停止后,无论我在它之后有什么,它都只是停止,没有错误消息或任何东西。发生了什么事?

在 scanf 读取 int 后,fgets 正在抓取缓冲区中的换行符。在 fgets 之前放置一个 getchar() 应该可以解决问题。

What is happening?

您的代码将:

  • 输入123 abc:

    • 123 存储在 n 中,将 space 存储在 frase 中,后跟一个空字节。然后它将打印单个 space 并结束它的执行,没有错误。
  • 输入123输入abc:

    • 123 存储在 n 中,并在 frase 中存储按 Enter[=51= 时添加到缓冲区的换行符 \n ],后跟一个空字节,接下来它将打印 \n 并结束它的执行,没有错误。

所以它不仅会停止,还会做它应该做的事情。

为了使您的代码更健壮,您应该做的是也用 fgets 解析数字,并用 sscanfstrtol:[=27= 转换它]

int n = 0;
char buffer[20];
char frase[2];

fgets(buffer, sizeof buffer, stdin); 
if(sscanf(buffer, "%d", &n) != 1){
    //value not parsed
}

fgets(frase, sizeof frase, stdin);

puts(frase);

使用 scanf 来解析输入很少是一个好主意。