如何将int和double作为输入而不是char?

时间:2016-03-25 16:52:51

标签: c input scanf

我正在尝试创建一个while循环,用于将personArrayint作为输入。但有时输入中可能有double我想跳过,然后继续循环。

这将跳过循环,我仍然想使用scanf:

char

2 个答案:

答案 0 :(得分:2)

您的意思是输入验证吗?

char line[80];
int ival;
double dval;

fgets(line, 80, stdin);

if (sscanf(line, "%d", &ival) == 1)
    /* got an int */
else if (sscanf(line, "%f", &dval) == 1)
    /* got a double */
else
    fprintf(stderr, "Not int nor double\n");

答案 1 :(得分:2)

首先读取整行,然后使用sscanf将输入行解析为整数和双精度。但是,如果解析未能给出int和double,则得出结论:作为错误情况,即行中存在的char。

您可以尝试以下代码:

int main(int argc, char const *argv[])
{
    char line[100];
    while(fgets(line, 100, stdin)) {
        int i;
        double d;
        if(sscanf(line, "%d %lf", &i, &d) == 2) {
            printf("%d %lf\n", i, d);
        }
        else {
            printf("wrong input!\n");
        }
    }
    return 0;
}

根据评论编辑:

来自cppreference.com

  

<强> char *fgets( char *str, int count, FILE *stream );

     

<强>参数

     

str - 指向char数组元素的指针

     

count - 要写入的最大字符数(通常为长度   str)

     

stream - 从

读取数据的文件流      

返回值

     

str成功,null指针失败。

因此,while(fgets(str...))转换为“while fgets不返回null”,这转换为“fgets继续成功读取输入流(在本例中为stdin ,标准输入)“。

请查看文档以获得进一步说明。