[英]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;
}
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.