首页 > 解决方案 > 无法运行一段代码以从 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程序停止后,无论我有什么,它只会停止,没有错误消息或任何东西。怎么了?

标签: cinputio

解决方案


怎么了?

您的代码将:

  • 对于输入123 abc

    • 存储123n,存储空间frase后跟一个空字节。然后它将打印该单个空格并结束其执行而没有错误。
  • 对于输入123 Enter abc

    • 存储并存储在123您按下时添加到缓冲区的换行符,然后是一个空字节,接下来它将打印并结束其执行而没有错误。nfrase\nEnter\n

所以它不只是停止,它会做它应该做的事情。

为了使您的代码更健壮,您应该做的是还用 解析数字,并用orfgets转换它:sscanfstrtol

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解析输入很少,如果有的话,是一个好主意。


推荐阅读