2017-07-02 77 views
-3

用户只给一次输入,输出应该根据输入打印。如何知道用户给出的输入是C编程中的字符串还是浮点数或整数

  • 如果用户输入字符串,则应打印“它是字符串”。
  • 如果用户输入一个整数,它应该打印“它是整数”。
  • 如果用户输入一个浮点数,它应该打印“它是浮点数”。
+1

这取决于程序员,他如何接受输入! –

+0

以字符串形式读取数据('fgets()'或许 - 甚至),然后分析字符串。你可以使用'sscanf()'或'strtol()'或'strtod()'等来决定字符串中的内容。你可以通过不同的方式分析它,因为你捕获了输入。 –

+0

'stdin'没有输入是'int'或'float'。输入是文本,并据此解释。假设输入是'01EFh'。这是一个数字还是一个字符串? –

回答

0

fgets在一行中读取,然后用不同的格式说明符重复地在缓冲区上调用sscanf。检查每个sscanf调用的返回值,看看格式是正确的

char line[80]; 
int ival; 
float fval; 

fgets(line, 80, stdin); 

if (sscanf(line, "%d", &ival)) 
    printf("It is integer\n"); 
if (sscanf(line, "%f", &fval)) 
    printf("It is float\n"); 
else 
    printf("It isn't an int nor a float; it is a string\n"); 

sscanf的顺序调用事项,顺便说一句。从if-else阶梯顶部的最具体的格式说明符开始,以最一般的阶梯结束。

如果你想处理有效的输入,但最终会有垃圾,你将不得不使用strtol,这更加复杂。

+1

是的,不,也许:如果输入是'3.14159那么它会报告'它是一个整数'(因为第一个字符是一个整数),如果它被允许,它会报告'它是一个浮点数'(因为前七个字符是一个浮点数值),但它可能应该报告'它是一个字符串',因为输入作为一个整体既不是整数也不是浮点数。我同意“使用'fgets()'”,但分析必须更加细致。 –

+0

@JonathanLeffler好点,我补充说我的回答 – stackptr

+0

@JonathanLeffler,这是一个规范问题,而不是猜测。什么是有效的输入,并且必须对照(包括错误)进行检查。 –

相关问题