- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
您好,我的作业需要一些帮助。我是编程新手。我遇到了该程序的一些错误。
#include <stdio.h>
#include <stdlib.h>
#include <string.h> //for strtok
#include <ctype.h>
//function prototypes
struct Student* readFile(int*, struct Student*);
char *trimwhitespace(char *str);
void listRecords(struct Student*, int);
void writeFile(struct Student*, int);
int isValid1(char *);
int isValidatt(char *);
int isValidatt2(char [10][10]);
int isValid3(char *);
struct Student {
char SID [10];
char name[30];
char code [20];
char attendance [10][10] ;
int test1;
int test2;
int tutorial;
int exam;
};
int main() {
int numStudents = 0;
int choice;
struct Student *students; //array of students
students = (struct Student *) malloc(sizeof(struct Student));
//create one empty slot
do {
printf("[1] Read from file \n");
printf("[2] List records \n");
printf("[3] Write to file \n");
printf("[4] Exit \n");
printf("Choice: ");
scanf("%i", &choice);
switch(choice) {
case 1:
printf("Reading from file .. \n");
students = readFile(&numStudents, students);
printf("Read from file %i customers\n", numStudents);
break;
case 2:
printf("Listing records .. \n");
listRecords(students, numStudents);
break;
case 3:
printf("Writing to file .. \n");
writeFile(students, numStudents);
break;
case 4:
printf("Bye .. \n");
break;
}
} while(choice != 4);
return 0;
}
struct Student* readFile(int *numStudents, struct Student *students) {
FILE *inFile; //file handle
char filename[50];
char line[255]; //for each line
int i = 0, j;
char *token;
printf("Enter filename: "); //prompt user for filename
scanf("%s", filename);
//check that file can be found and opened
if ((inFile = fopen(filename, "r")) == NULL) {
printf("Open failed : %s\n", filename) ;
exit(1) ;
}
//create one empty slot
students = (struct Student *) malloc(sizeof(struct Student));
//reading file, line by line
while (fgets(line,255, inFile)!=NULL) {
token = strtok(line, ","); //comma is the delimiter/separator
strcpy(students[i].SID, trimwhitespace(token));
printf("%s\n", students[i].SID);
token = strtok(NULL, ","); //get next token -> name
strcpy(students[i].name, trimwhitespace(token));
printf("%s\n", students[i].name);
token = strtok(NULL, ","); //get next token -> class code
strcpy(students[i].code, trimwhitespace(token));
printf("%s\n", students[i].code);
for(j = 0; j < 10; j++) {
token = strtok(NULL, ","); //get next token -> attendance
strcpy(students[i].attendance[j], trimwhitespace(token));
printf("%s\n", students[i].attendance[j]);
}
token = strtok(NULL, ","); //get next token -> test 1
strcpy(students[i].name, trimwhitespace(token));
//students[i].test1 = atoi(trimwhitespace(token));
printf("%d\n", students[i].test1);
token = strtok(NULL, ","); //get next token -> test 1
strcpy(students[i].name, trimwhitespace(token));
//students[i].test2 = atoi(trimwhitespace(token));
printf("%d\n", students[i].test2);
token = strtok(NULL, ","); //get next token -> tutorial
strcpy(students[i].name, trimwhitespace(token));
//students[i].tutorial = atoi(trimwhitespace(token));
printf("%d\n", students[i].tutorial);
token = strtok(NULL, ","); //get next token -> exam
strcpy(students[i].name, trimwhitespace(token));
//students[i].exam = atoi(trimwhitespace(token));
printf("%d\n", students[i].exam);
i++;
//resize it to add in one extra slot
students = (struct Student *) realloc(students, (i+1)*sizeof(struct Student));
}
fclose(inFile); //close the file
*numStudents = i;
return students;
}
void listRecords(struct Student *students, int n) {
int i;
if(n == 0) {
printf("No Student in list .. \n");
} else {
for(i = 0; i < n; i++) {
printf("[Student #%d]\n", i+1);
printf("%s %s %s %s %s %s %s %s %s %s %s %s %d %d %d %d \n",
students[i].SID, students[i].name, students[i].code, students[i].attendance [0], students[i].attendance [1], students[i].attendance [2], students[i].attendance [3], students[i].attendance [4],
students[i].attendance [5], students[i].attendance [6], students[i].attendance [7], students[i].attendance [8], students[i].test1, students[i].test2, students[i].tutorial, students[i].exam, "\n");
}
}
}
void writeFile(struct Student *students, int n) {
FILE *inFile1;
FILE *inFile2;
char filename1[30] = "EN0273-Errors(LeeAiWen).txt";
char filename2[30] = "EN0273-Valid(LeeAiWen).csv";
int i, valid;
Student s;
if ((inFile1 = fopen(filename1, "w")) == NULL)
{
printf("Open failed : %s\n", filename1) ;
exit(1) ;
}
if ((inFile2 = fopen(filename2, "w")) == NULL)
{
printf("Open failed : %s\n", filename1) ;
exit(1) ;
}
valid = 1;
for(i = 0; i < n; i++) {
s = students[i];
if(isValid1(s.SID) == 0) {
fprintf(inFile1, "%s %s %s \n", s.SID, s.name, s.code);
}else {fprintf(inFile2, "%s %s %s \n", s.SID, s.name, s.code);}
if(isValidatt2(s.attendance) == 0) {
fprintf(inFile1, "%s %s %s \n", s.SID, s.name, s.code);
}else {fprintf(inFile2, "%s %s %s \n", s.SID, s.name, s.code);}
if(isValid3(s.test2) == 0) {
fprintf(inFile1, "%s %s %s \n", s.SID, s.name, s.code);
}else {fprintf(inFile2, "%s %s %s \n", s.SID, s.name, s.code);}
/*
if(valid == 0) {
fprintf(inFile1, "%s %s %s \n", s.SID, s.name, s.code);
} else {
fprintf(inFile2, "%s %s %s \n", s.SID, s.name, s.code);
}
*/
}
fclose(inFile1);
fclose(inFile2);
}
int isValid3( char *id) { //returns 1 if valid, otherwise 0
int i;
if(atoi (id) > 60) { return 0; } // used 'atoi' to convert 'id' to int to compare with '60' which is an int value, marks should not be more than 60 max
for(i = 0; i < 2; i++) { // only 2 digits are allowed and no characters
if(isdigit(id[i]) == 0) { return 0; }
}
return 1;
}
char *trimwhitespace(char *str)
{
char *end;
// Trim leading space
while(isspace((unsigned char)*str)) str++;
if(*str == 0) // All spaces?
return str;
// Trim trailing space
end = str + strlen(str) - 1;
while(end > str && isspace((unsigned char)*end)) end--;
// Write new null terminator
*(end+1) = 0;
return str;
}
最佳答案
您的代码有 3 个问题:-
我修改了你的代码,看看吧:-
#include <stdio.h>
#include <stdlib.h>
#include <string.h> //for strtok
#include <ctype.h>
//function prototypes
struct Student* readFile(int*, struct Student*);
char *trimwhitespace(char *str);
void listRecords(struct Student*, int);
void writeFile(struct Student*, int);
int isValid1(char *);
int isValidatt(char *);
int isValidatt2(char [10][10]);
int isValid3(int *);
struct Student {
char SID [10];
char name[30];
char code [20];
char attendance [10][10] ;
int test1;
int test2;
int tutorial;
int exam;
};
int main() {
int numStudents = 0;
int choice;
struct Student *students; //array of students
students = (struct Student *) malloc(sizeof(struct Student));
//create one empty slot
do {
printf("[1] Read from file \n");
printf("[2] List records \n");
printf("[3] Write to file \n");
printf("[4] Exit \n");
printf("Choice: ");
scanf("%i", &choice);
switch(choice) {
case 1:
printf("Reading from file .. \n");
students = readFile(&numStudents, students);
printf("Read from file %i customers\n", numStudents);
break;
case 2:
printf("Listing records .. \n");
listRecords(students, numStudents);
break;
case 3:
printf("Writing to file .. \n");
writeFile(students, numStudents);
break;
case 4:
printf("Bye .. \n");
break;
}
} while(choice != 4);
return 0;
}
struct Student* readFile(int *numStudents, struct Student *students) {
FILE *inFile; //file handle
char filename[50];
char line[255]; //for each line
int i = 0, j;
char *token;
printf("Enter filename: "); //prompt user for filename
scanf("%s", filename);
//check that file can be found and opened
if ((inFile = fopen(filename, "r")) == NULL) {
printf("Open failed : %s\n", filename) ;
exit(1) ;
}
//create one empty slot
students = (struct Student *) malloc(sizeof(struct Student));
//reading file, line by line
while (fgets(line,255, inFile)!=NULL) {
token = strtok(line, ","); //comma is the delimiter/separator
strcpy(students[i].SID, trimwhitespace(token));
printf("%s\n", students[i].SID);
token = strtok(NULL, ","); //get next token -> name
strcpy(students[i].name, trimwhitespace(token));
printf("%s\n", students[i].name);
token = strtok(NULL, ","); //get next token -> class code
strcpy(students[i].code, trimwhitespace(token));
printf("%s\n", students[i].code);
for(j = 0; j < 10; j++) {
token = strtok(NULL, ","); //get next token -> attendance
strcpy(students[i].attendance[j], trimwhitespace(token));
printf("%s\n", students[i].attendance[j]);
}
token = strtok(NULL, ","); //get next token -> test 1
strcpy(students[i].name, trimwhitespace(token));
//students[i].test1 = atoi(trimwhitespace(token));
printf("%d\n", students[i].test1);
token = strtok(NULL, ","); //get next token -> test 1
strcpy(students[i].name, trimwhitespace(token));
//students[i].test2 = atoi(trimwhitespace(token));
printf("%d\n", students[i].test2);
token = strtok(NULL, ","); //get next token -> tutorial
strcpy(students[i].name, trimwhitespace(token));
//students[i].tutorial = atoi(trimwhitespace(token));
printf("%d\n", students[i].tutorial);
token = strtok(NULL, ","); //get next token -> exam
strcpy(students[i].name, trimwhitespace(token));
//students[i].exam = atoi(trimwhitespace(token));
printf("%d\n", students[i].exam);
i++;
//resize it to add in one extra slot
students = (struct Student *) realloc(students, (i+1)*sizeof(struct Student));
}
fclose(inFile); //close the file
*numStudents = i;
return students;
}
void listRecords(struct Student *students, int n) {
int i;
if(n == 0) {
printf("No Student in list .. \n");
} else {
for(i = 0; i < n; i++) {
printf("[Student #%d]\n", i+1);
printf("%s %s %s %s %s %s %s %s %s %s %s %s %d %d %d %d \n",
students[i].SID, students[i].name, students[i].code, students[i].attendance[0], students[i].attendance[1], students[i].attendance[2], students[i].attendance[3], students[i].attendance[4],
students[i].attendance[5], students[i].attendance[6], students[i].attendance[7], students[i].attendance[8], students[i].test1, students[i].test2, students[i].tutorial, students[i].exam, "\n");
}
}
}
void writeFile(struct Student *students, int n) {
FILE *inFile1;
FILE *inFile2;
char filename1[30] = "EN0273-Errors(LeeAiWen).txt";
char filename2[30] = "EN0273-Valid(LeeAiWen).csv";
int i, valid;
struct Student s;
if ((inFile1 = fopen(filename1, "w")) == NULL)
{
printf("Open failed : %s\n", filename1) ;
exit(1) ;
}
if ((inFile2 = fopen(filename2, "w")) == NULL)
{
printf("Open failed : %s\n", filename1) ;
exit(1) ;
}
valid = 1;
for(i = 0; i < n; i++) {
s = students[i];
/* if(isValid1(s.SID) == 0) {
fprintf(inFile1, "%s %s %s \n", s.SID, s.name, s.code);
}else {fprintf(inFile2, "%s %s %s \n", s.SID, s.name, s.code);}
if(isValidatt2(s.attendance) == 0) {
fprintf(inFile1, "%s %s %s \n", s.SID, s.name, s.code);
}else {fprintf(inFile2, "%s %s %s \n", s.SID, s.name, s.code);}
*/
if(isValid3(&s.test2) == 0) {
fprintf(inFile1, "%s %s %s \n", s.SID, s.name, s.code);
}else {fprintf(inFile2, "%s %s %s \n", s.SID, s.name, s.code);}
/*
}
fclose(inFile1);
fclose(inFile2);
}
int isValid3(int *id) { //returns 1 if valid, otherwise 0
int i;
if(*id > 60) { return 0; } // used 'atoi' to convert 'id' to int to compare with '60' which is an int value, marks should not be more than 60 max
for(i = 0; i < 2; i++) { // only 2 digits are allowed and no characters
if(id[i] == 0) { return 0; }
}
return 1;
}
char *trimwhitespace(char *str)
{
char *end;
// Trim leading space
while(isspace((unsigned char)*str)) str++;
if(*str == 0) // All spaces?
return str;
// Trim trailing space
end = str + strlen(str) - 1;
while(end > str && isspace((unsigned char)*end)) end--;
// Write new null terminator
*(end+1) = 0;
return str;
}
关于c - 编程错误 - 名称被截断,无法将参数 1 从 'int' 转换为 'char *',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40925200/
我正在尝试做这样的事情:Name[i] = "Name"+ (i+1) 在 forloop 中,这样数组的值将是:Name[0] = Name1,Name[1] = Name2,Name[2] = N
我读了here,在GSP中我们可以这样写: ${params.action} 从GSP中,我们可以使用${params.action}作为参数调用Javascript函数(请参阅here)。 是否有其
我的问题:非常具体。我正在尝试想出解析以下文本的最简单方法: ^^domain=domain_value^^version=version_value^^account_type=account_ty
我创建了一条与此类似的路线: Router::connect("/backend/:controller/:action/*"); 现在我想将符合此模式的每个 Controller 路由重命名为类似
我在 Visual Studio 2013 项目中收到以下警告: SQL71502 - Procedure has an unresolved reference to object 最佳答案 这可以
任何人都可以指导我使用名称/值 .NET 集合或 .NET 名称/值字典以获得最佳性能吗?请问最好的方法是什么?我的应用程序是 ASP.NET、WCF/WF Web 应用程序。每个集合应该有 10 到
我在 Zend Framework 2 中有一个默认模块: namespace Application\Controller; use Zend\Mvc\Controller\AbstractActi
这是表格: 关于javascript - 在 javascript 中,这是一个有效的结构吗? : document. 名称.名称.值?,我们在Stack Overflow上找到一个类似的
HtmlHelper.ActionLink(htmlhelper,string linktext,string action) 如何找出正确的路线? 如果我有这个=> HtmlHelper.Actio
我需要一些有关如何将 Controller 定义传递给嵌套在 outer 指令中的 inner 指令的帮助。请参阅http://plnkr.co/edit/Om2vKdvEty9euGXJ5qan一个
请提出一个数据结构来表示内存中的记录列表。每条记录由以下部分组成: 用户名 积分 排名(基于积分)- 可选字段- 可以存储在记录中或可以动态计算 数据结构应该支持高效实现以下操作: Insert(re
错误 : 联合只能在具有兼容列类型的表上执行。 结构(层:字符串,skyward_number:字符串,skyward_points:字符串)<> 结构(skyward_number:字符串,层:字符
我想要一个包含可变数量函数的函数,但我希望在实际使用它们之前不要对它们求值。我可以使用 () => type 语法,但我更愿意使用 => type 语法,因为它似乎是为延迟评估而定制的。 当我尝试这样
我正在编写一个 elisp 函数,它将给定键永久绑定(bind)到当前主要模式的键盘映射中的给定命令。例如, (define-key python-mode-map [C-f1] 'pytho
卡在R中的错误上。 Error in names(x) <- value : 'names' attribute must be the same length as the ve
我有字符串,其中包含名称,有时在字符串中包含用户名,后跟日期时间戳: GN1RLWFH0546-2020-04-10-18-09-52-563945.txt JOHN-DOE-2020-04-10-1
有人知道为什么我会收到此错误吗?这显示将我的项目升级到新版本的Unity3d之后。 Error CS0103: The name `Array' does not exist in the curre
由于 Embarcadero 的 NNTP 服务器从昨天开始就停止响应,我想我可以在这里问:我使用非数据库感知网格,我需要循环遍历数据集以提取列数、它们的名称、数量行数以及每行中每个字段的值。 我知道
在构建Android应用程序的子项目中,我试图根据根build.gradle中的变量设置版本代码/名称。 子项目build.gradle: apply plugin: 'com.android.app
示例用例: 我有一个带有属性“myProperty”的对象,具有 getter 和 setter(自 EcmaScript 5 起支持“Property Getters 和 Setters”:http
我是一名优秀的程序员,十分优秀!