繁体   English   中英

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

[英]How to take int and double as input but not a char?

我正在尝试创建一个while循环,该循环将使用一个int和一个double作为输入。 但是有时在输入中可能有一个我想要跳过的char ,然后继续循环。

这将跳过循环,而我仍要使用scanf:

scanf("%d%lf", &num,&n_double);
while((num != 'a')&&(n_double != 'a'))

您的意思是输入验证吗?

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");

首先读取整行,然后使用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”,这转换为“ while fgets继续成功读取输入流(在本例中为stdin ,标准输入)” 。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM