c - 我可以输入 int 或终止 scanf 函数吗?
问题描述
我们学校课的任务是输入一些整数。我们不知道会有多少。
我想知道是否有可能格式化scanf
存储整数或按回车键自行终止的函数。
我可以以某种方式将scanf("%d")
仅存储整数和scanf("%[^\n])
终止scanf
函数的方法放在一起吗?
我所知道的是我不能使用scanf("%d%[^\n])
,因为scanf
正在等待那个我不想输入的整数,因为我已经存储了我必须输入的所有整数。
我真的不喜欢将所有这些整数的字符串存储到一个数组中,然后将其转换为具有确切数字的另一个数组的元素。
解决方案
该scanf
功能难以正确使用。
相反,一次读一行fgets
。如果输入的字符串只是换行符,则退出循环。如果没有,请使用strtol
解析值。如果结束指针指向输入末尾的换行符,您将知道是否只输入了一个整数。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
int main()
{
char line[100], *p;
long val;
while (fgets(line, sizeof(line), stdin)) {
// if enter was pressed by itself, quit loop
if (!strcmp(line, "\n")) {
break;
}
errno = 0;
val = strtol(line, &p, 10);
if (errno) {
perror("error reading value");
} else if ((p != line) && (*p == '\n')) {
// a valid integer was read
printf("read value %ld\n", val);
} else {
// a non-integer was read or extra characters were entered
printf("not a valid integer: %s", line);
}
}
return 0;
}
推荐阅读
- r - R和p值中一个变量与所有其他变量的相关性
- android - Android - ViewModel 依赖于意图,后退按钮有问题
- nestjs - Nestjs在身份验证期间请求范围数据
- reactjs - React 中自己的 TreeStructure - RenderTree
- django - 如何在 Django 中创建更新表单表
- c - 圆括号中的 C 函数
- python - 从各个距离创建距离矩阵
- javascript - 在 Firebase 中访问布尔值
- node.js - 如何在 Google 的 OAuth 客户端 ID 中创建应用程序类型“其他”
- reactjs - Gatsby 在客户端添加动态页面