无法 运行 一段代码从 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
解析数字,并用 sscanf
或 strtol
:[=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
来解析输入很少是一个好主意。
这个问题可能看起来很愚蠢,但我不习惯用 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
解析数字,并用 sscanf
或 strtol
:[=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
来解析输入很少是一个好主意。