我该怎么做才能让用户输入我不想要的东西,它会在C中触发一条消息?

时间:2014-09-12 04:09:55

标签: c

我是C编程的新手,我目前有这个简单的代码,要求用户输入一个浮动数字,并且使用该值将它打印出来,但我想知道如何制作它以便它给出一个如果用户输入任何内容,则输入一个数字。我知道你需要使用if和else语句,但不知道如何使用参数部分..

到目前为止我的代码(直到我找到如何处理非数字的输入才完成代码):

#include <stdio.h>

int main()
{
    float input;
    printf("Hello please enter a float number!\n";
    scanf( "%f", &input);
}

我知道你需要使用if和else语句,但我来自Python背景,所以语法完全不同......寻找一些如何处理这个的指导!请不要太高级,我正在寻找简单的东西。

编辑:

谢谢大家的好评!这真的有助于我了解未来处理此类问题的更多方法! :d

2 个答案:

答案 0 :(得分:3)

虽然doukremt是正确的,你可以检查scanf的返回值来检测这个特定的错误,scanf实际上只是用于快速和肮脏的解决方案,并且当你想要时有许多失败更健壮的行为。

我建议将整行输入作为字符串读取(例如,使用fgets),然后使用strtof或类似函数进行转换,这会告诉您使用转换失败时的第三个参数。然后,您可以明确检查每个可能的错误情况并适当地处理它们。

答案 1 :(得分:1)

要检查输入是否输入了某些数字,例如1.2(而不是像!acd那样的其他数字),您应该使用scanf的返回值(它返回扫描项目的数量) )。

阅读scanf(3)的文档(通常,请阅读您正在使用的每个函数的文档):

These functions return the number of input items successfully matched
and assigned, which can be fewer than provided for, or even zero in 
the event of an early matching failure.
 The value EOF is returned if the end of input is reached before
 either the first successful conversion or a matching failure occurs.

具体而言,您可以编写类似以下内容的代码:

int main() {
   float input=0; // or perhaps NAN
   printf("Hello please enter a float number!\n";
   if (scanf( "%f", &input)<1) {
     perror("bad input"); exit (EXIT_FAILURE);
   }
}

当然,您可能希望重复此问题,直到获得浮点数。然后使用while。并且您可以处理不同的无效输入(scanf返回0),文件结束或读取错误(scanf返回EOF),可能:

int main() {
  float input=0;
  int nbscan= -1;
  do {
    printf("Enter a number:\n");
    nbscan = scanf("%f", &input);
    if (nbscan==EOF) { perror("EOF from scanf"; exit(EXIT_FAILURE); }
  } while (nbscan<1);
  return 0;
 }

然而,这通常意味着用户输入了一些输入;也许你想要在用户没有在500毫秒内输入任何内容时捕获这种情况。然后,您应该操作系统特定的功能或系统调用。在Linux和Posix上,poll(2)系统调用是相关的。