这个问题可能看起来很愚蠢,但是我不习惯使用C语言,在这里我不知道为什么出了错。
基本上,我想要从用户那里得到一个数字,然后是一个字符串,用户可以写下他想写的任何内容,我只想保留该字符串的第一个字符。
我的代码如下:
#include <stdio.h>
int main()
{
int b, n;
char frase [2];
scanf("%d", &n);
fgets(frase, 2, stdin);
puts(frase);
return 0;
}
我的问题是,fgets
程序停止运行之后,无论我执行什么操作,它都只会停止运行,没有错误消息或其他任何信息。怎么了?
怎么了?
您的代码将:
输入123 abc
:
123
于n
,存储空格,frase
后跟一个空字节。然后,它将打印该单个空间并结束其执行而不会出错。输入123
Enter abc
:
123
中n
,并存储在frase
换行符\n
添加到缓冲区,当你按下Enter,随后是空字节,接下来将打印\n
并结束其没有错误的执行。因此,它不仅止步不前,而且还可以实现应有的功能。
为了使代码更健壮,您应该做的是还使用解析数字fgets
,并使用sscanf
或进行转换strtol
:
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
如果有的话,很少使用解析输入来进行分析。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句