#include<stdio.h> #include<time.h> #include<stdlib.h> #include<string.h> #define NUM 94 struct student { char name[20]; char list[20]; char sex[5]; char major[50]; int order; int is = 1; }; void Createlist(struct student *p,int n) { printf("请输入在哪里创建目标文件\n"); char* file = (char*)malloc(sizeof(char)); scanf("%s", file); FILE* fp=fopen(file,"w"); srand((unsigned)time(NULL)); int i,j=1,r1,r2,k; k = NUM / n; int sum = NUM; //fprintf(fp, "共分为%d小组:\n", n); for (i = 0; i<k; i++) { fprintf(fp, "第%d小组:\n",i+1); j = 0; while (j <n) { do { r1 = rand() % NUM; } while (p[r1].is == 0); do { r2 = rand() % NUM; } while (p[r2].is == 0); if (r1 == r2) continue; fprintf(fp, "%s %s %s %s\n", p[r1].list, p[r1].name,p[r1].sex,p[r1].major); sum--; if (j >= n - 1) { p[r1].is = 0; break; } if (strcmp(p[r1].major, p[r2].name) || strcmp(p[r1].sex, p[r2].sex)) { fprintf(fp, "%s %s %s %s\n",p[r2].list, p[r2].name,p[r2].sex,p[r2].major); j++; sum--; } j++,p[r1].is=0,p[r2].is=0; if (sum == 0) break; } } if (sum > 0) { fprintf(fp, "第%d小组:\n", i + 1); for (i = 0; i < NUM; i++) { if (p[i].is == 1) fprintf(fp, "%s %s %s %s\n", p[i].list, p[i].name, p[i].sex, p[i].major); } } fclose(fp); } int main() { FILE* fp; int m; printf("请输入每组人数:\n"); //char file[] = "C:\\vscode\\namelist(1).txt"; char *file=(char*)malloc(sizeof(char)); scanf("%d", &m); printf("请输入分组名单文件位置\n"); scanf("%s", file); fp = fopen(file, "r"); int n, i, j; fscanf(fp, "%d", &n); //printf("%d\n", n); struct student *p,s[94]; for (i = 0; i < n; i++) { fscanf(fp, "%d", &s[i].order); fscanf(fp, "%s", s[i].list); fscanf(fp, "%s ", s[i].name); fscanf(fp, "%s", s[i].sex); fscanf(fp, "%s", s[i].major); } p = s; Createlist(p,m); fclose(fp); printf("分组已完成,请查看结果。\n"); return 0; }请问该程序是通过什么方式将文件输出到指定地址的
时间: 2023-12-06 16:42:36 浏览: 27
该程序使用了C语言标准库中的文件操作函数,通过调用fopen函数打开指定文件,然后使用fprintf函数将数据输出到文件中,最后通过fclose函数关闭文件。在程序中,用户输入的目标文件名被保存到一个字符数组中,并通过fopen函数以写入模式打开文件,将文件指针保存在fp变量中。然后通过fprintf函数将数据输出到文件中。最后使用fclose函数关闭文件。
相关问题
#include<string.h>#include<stdlib.h>#include<stdio.h>#include<iostream>#define MAXLEN 100
这段代码是一个C语言的程序,包含了一些头文件和宏定义。让我逐一介绍一下:
1. `#include<string.h>`:这个头文件是C语言中用来操作字符串的库,提供了一些字符串处理函数的声明和定义。
2. `#include<stdlib.h>`:这个头文件是C语言中的标准库,提供了一些常用的函数,如内存分配、类型转换等。
3. `#include<stdio.h>`:这个头文件是C语言中的标准输入输出库,提供了一些输入输出函数的声明和定义。
4. `#include<iostream>`:这个头文件是C++语言中的输入输出流库,提供了一些用于输入输出的类和函数。
5. `#define MAXLEN 100`:这是一个宏定义,将标识符MAXLEN替换为100。它可以用来定义一个常量,表示字符串的最大长度为100。
以上是对代码中包含的头文件和宏定义的简单介绍。
编写串的堆式存储,并且不写#include <string.h>这句
以下是一个使用堆式存储的串的示例代码,实现了串的赋值、拼接、比较和输出等基本操作,不使用<string.h>库函数:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100 // 字符串最大长度
typedef struct {
char *str; // 字符串指针
int len; // 字符串长度
} String;
// 初始化字符串
void initString(String *s) {
s->str = (char *)malloc(MAX_SIZE * sizeof(char)); // 分配初始空间
s->len = 0;
}
// 释放字符串空间
void freeString(String *s) {
free(s->str);
s->len = 0;
}
// 赋值操作
void assignString(String *s, char *c) {
int i, len = 0;
while (c[len] != '\0') { // 计算字符串长度
len++;
}
if (len > MAX_SIZE) {
printf("String too long!\n");
exit(1); // 报错退出
}
for (i = 0; i < len; i++) {
s->str[i] = c[i]; // 逐个字符复制
}
s->str[len] = '\0'; // 添加结束符
s->len = len;
}
// 拼接操作
void concatString(String *s, char *c) {
int i, j, len = 0;
while (c[len] != '\0') { // 计算字符串长度
len++;
}
if (s->len + len > MAX_SIZE) {
printf("String too long!\n");
exit(1); // 报错退出
}
for (i = s->len, j = 0; j < len; i++, j++) {
s->str[i] = c[j]; // 逐个字符复制
}
s->str[i] = '\0'; // 添加结束符
s->len += len;
}
// 比较操作
int cmpString(String *s1, String *s2) {
int i;
for (i = 0; i < s1->len && i < s2->len; i++) {
if (s1->str[i] < s2->str[i]) {
return -1;
} else if (s1->str[i] > s2->str[i]) {
return 1;
}
}
if (s1->len < s2->len) {
return -1;
} else if (s1->len > s2->len) {
return 1;
}
return 0;
}
// 输出操作
void printString(String *s) {
printf("%s\n", s->str);
}
int main() {
String s;
initString(&s);
assignString(&s, "hello");
concatString(&s, " world");
printString(&s);
freeString(&s);
return 0;
}
```
注意在本例中,赋值和拼接操作使用了逐个字符复制的方式,而比较操作则使用了逐个字符比较的方式,效率相对较低。在实际应用中,可以根据具体情况选择使用库函数或自己实现。