我正在尝试创建一个while循环,用于将personArray
和int
作为输入。但有时输入中可能有double
我想跳过,然后继续循环。
这将跳过循环,我仍然想使用scanf:
char
答案 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;
}
<强>
char *fgets( char *str, int count, FILE *stream );
强><强>参数强>
str
- 指向char数组元素的指针
count
- 要写入的最大字符数(通常为长度 str)读取数据的文件流
stream
- 从返回值
str
成功,null
指针失败。
因此,while(fgets(str...))
转换为“while fgets
不返回null”,这转换为“fgets继续成功读取输入流(在本例中为stdin
,标准输入)“。
请查看文档以获得进一步说明。