c语言读取文件并把数字存入数组
时间: 2023-08-24 14:11:07 浏览: 189
可以通过使用标准库函数`fscanf()`从文件中读取数字,并将它们存储到数组中。
下面是一个示例代码:
```c
#include <stdio.h>
int main() {
FILE *fp;
int num_array[100]; // 假设最多读取 100 个数字
int i = 0, num;
fp = fopen("input.txt", "r"); // 打开文件
if (fp == NULL) {
printf("无法打开文件\n");
return 1;
}
// 读取文件中的数字,并存储到数组中
while (fscanf(fp, "%d", &num) == 1) {
num_array[i++] = num;
}
// 输出数组中的数字
for (int j = 0; j < i; j++) {
printf("%d ", num_array[j]);
}
printf("\n");
fclose(fp); // 关闭文件
return 0;
}
```
这个程序假设要读取的数字以空格符分隔,并且存储到名为`input.txt`的文件中。程序打开文件,读取文件中的数字,并将它们存储到数组`num_array`中。最后,程序输出数组中的数字,并关闭文件。
相关问题
c语言读取txt文件并存入结构体数组
C语言可以通过以下步骤来读取txt文件并存入结构体数组。
首先,我们需要定义一个结构体类型,用来表示txt文件中的数据。假设我们要读取的txt文件中的每一行包含学生的姓名和年龄,我们可以定义一个名为Student的结构体类型,包含name和age两个成员变量。
```c
typedef struct {
char name[50];
int age;
} Student;
```
然后,我们需要打开文件并读取其中的数据。可以使用标准库函数`fopen`来打开txt文件,使用`fgets`函数逐行读取文件内容,并使用`sscanf`函数将读取到的数据存入结构体数组中。
```c
FILE *file = fopen("students.txt", "r");
if (file == NULL) {
printf("无法打开文件\n");
return;
}
Student students[100]; // 假设最多有100个学生
int count = 0; // 记录读取到的学生个数
char line[100];
while (fgets(line, sizeof(line), file) != NULL) {
sscanf(line, "%s%d", students[count].name, &students[count].age);
count++;
}
fclose(file);
```
最后,我们需要关闭文件,并可以通过遍历数组输出读取到的数据,以验证读取是否成功。
```c
for (int i = 0; i < count; i++) {
printf("姓名:%s,年龄:%d\n", students[i].name, students[i].age);
}
```
以上就是用C语言读取txt文件并存入结构体数组的基本步骤。读者可以根据实际需求对代码进行修改和优化。
windows系统使用c语言读取串口数据并存入数组的代码
在Windows系统上,你可以使用C语言的`win32` API来读取串口数据并存入数组。以下是一个简单的示例代码,演示了如何在Windows上读取串口数据并将其存入数组:
```c
#include <stdio.h>
#include <windows.h>
#define MAX_BUFFER_SIZE 256
int main() {
HANDLE serial_port;
DCB dcb_serial_params;
COMMTIMEOUTS timeouts;
char buffer[MAX_BUFFER_SIZE];
DWORD bytes_read;
// 打开串口
serial_port = CreateFile("COM1", GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
if (serial_port == INVALID_HANDLE_VALUE) {
printf("无法打开串口\n");
return -1;
}
// 配置串口参数
memset(&dcb_serial_params, 0, sizeof(dcb_serial_params));
dcb_serial_params.DCBlength = sizeof(dcb_serial_params);
if (!GetCommState(serial_port, &dcb_serial_params)) {
printf("无法获取串口参数\n");
CloseHandle(serial_port);
return -1;
}
dcb_serial_params.BaudRate = CBR_9600; // 波特率设置为9600
dcb_serial_params.ByteSize = 8; // 数据位设置为8
dcb_serial_params.StopBits = ONESTOPBIT; // 1位停止位
dcb_serial_params.Parity = NOPARITY; // 无奇偶校验
if (!SetCommState(serial_port, &dcb_serial_params)) {
printf("无法设置串口参数\n");
CloseHandle(serial_port);
return -1;
}
// 配置读取超时时间
memset(&timeouts, 0, sizeof(timeouts));
timeouts.ReadIntervalTimeout = MAXDWORD;
timeouts.ReadTotalTimeoutConstant = 0;
timeouts.ReadTotalTimeoutMultiplier = 0;
if (!SetCommTimeouts(serial_port, &timeouts)) {
printf("无法设置超时时间\n");
CloseHandle(serial_port);
return -1;
}
// 读取串口数据
while (1) {
if (ReadFile(serial_port, buffer, MAX_BUFFER_SIZE, &bytes_read, NULL)) {
for (DWORD i = 0; i < bytes_read; i++) {
printf("%c", buffer[i]);
}
fflush(stdout);
}
}
// 关闭串口
CloseHandle(serial_port);
return 0;
}
```
在代码中,使用`CreateFile`函数打开串口,配置串口参数使用`GetCommState`和`SetCommState`函数,配置读取超时时间使用`SetCommTimeouts`函数,使用`ReadFile`函数读取串口数据。
需要注意的是,代码中的串口名称为"COM1",你可以根据实际情况修改为你要使用的串口名称。
希望对你有所帮助!如果有更多问题,请随时提问。