c++如何读取一串数目不确定的int型数据到数组中直到换行符结束,不用字符串转换成整数的方法
时间: 2024-11-09 19:17:43 浏览: 32
在C++中,如果你需要读取一串数目不确定的整数,并将它们直接存入数组而不通过字符串转换,你可以利用`scanf`函数结合动态内存分配。这里假设你有一个足够大的数组来存储这些整数,并且可以接受用户输入的换行作为结束标记。下面是一个示例:
```cpp
#include <iostream>
#include <cstdlib> // 包含malloc和free头文件
int* readInts(int& count) {
int *nums = nullptr; // 定义指向整数的指针
char input[100]; // 临时缓冲区用于接收输入
nums = new int[count]; // 动态分配大小为count的整数数组
std::cout << "请输入整数(以换行结束):" << std::flush;
// 使用scanf读取整数,并直接放入数组
for (size_t i = 0; i < count && fgets(input, sizeof(input), stdin); i++) {
if (sscanf(input, "%d%n", &nums[i], &count) == 1) { // 只读取一个整数
continue;
} else if (feof(stdin)) { // 检查是否到达文件结尾(即换行)
break;
} else {
std::cerr << "无效的输入! 请重新输入。\n";
delete[] nums;
nums = nullptr;
return nullptr; // 输入错误,释放已分配内存并返回NULL
}
}
return nums;
}
int main() {
int count;
int* numbers = readInts(count);
if (numbers) {
std::cout << "输入的整数有: ";
for (int i = 0; i < count; i++) {
std::cout << numbers[i] << " ";
}
std::cout << "\n";
delete[] numbers; // 一定要记得手动释放动态分配的内存
}
return 0;
}
```
在这个程序中,`readInts`函数使用`fgets`读取用户输入的一行,然后`sscanf`尝试解析单个整数。如果输入不是有效的整数或到达了换行,函数会捕获异常并返回`nullptr`。注意,在主函数里,我们还需要手动删除动态分配的内存。
阅读全文
相关推荐
![-](https://img-home.csdnimg.cn/images/20241231044937.png)
![-](https://img-home.csdnimg.cn/images/20241231044937.png)
![-](https://img-home.csdnimg.cn/images/20241231044901.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)