我正在尝试编辑一个结构数组。用户可以输入3个数字,每个数字执行不同的操作。例如,您可以通过键入:
来添加1
1234 marvin
所有代码都在
之下 void input_interpreter()
{
int input;
char inputc1[106];
scanf("%d", &input);
switch(input)
{
case 0 :
/*pretty self explanatory*/
exit(0);
break;
case 1 :
/*add a student to the array*/
scanf("%s", inputc1);
new_student((string_split_string(inputc1),(string_split_int(inputc1)));/*<----the warning points here*/
break;
case 2 :
/*Remove a specified student, (implicitly unenrolling them from all their units, if any), O(S + U).*/
remove();
break;
case 3 :
/*Print, in ascending numerical order of ID number, the ID numbers and names of the students in
the database, O(S).*/
print_array();
break;
}
input_interpreter();
return;
}
这是我用来分隔id和名称
的内容 int string_split_int(char input_string[])
{
char * ptr;
int ID = 1;
int ch = " ";
int i;
int name_start;
int array_length = sizeof(input_string);
ptr = strchr(input_string, ch);
name_start = array_length - sizeof(ptr); /*may have to change this if names are including namespaces*/
for(i = name_start; i >= array_length; i--)
{
ID=ID/10;
ID=ID+input_string[i];
}
return ID;
}
char string_split_string(char input_string[])
{
char * ptr;
char name[100];
int ch = ' ';
int i;
int name_start;
int array_length = sizeof(input_string);
ptr = strchr(input_string, ch);
name_start = array_length - sizeof(ptr); /*may have to change this if names are including namespaces*/
for(i = name_start; i <= array_length; i++)
{
name[i] = input_string[i];
}
return *name;
}
void new_student(char *name, int ID)
{
struct student s;
s.ID=ID;
s.name=name;
insert_array(s);
return;
}
不幸的是,这会引发一个传递的参数1'new_student'从整数中生成指针而没有强制警告。
答案 0 :(得分:2)
根据签名
void new_student(char *name, int ID)
第一个参数必须是char *
。
然而根据电话
new_student((string_split_string(inputc1),(string_split_int(inputc1)));
/*<----the warning points here*/
和每个签名
char string_split_string(char input_string[]);
string_split_string()
返回的类型,因此new_student()
的第一个参数是char
。
简而言之,来电者提供char
,其中被叫方需要char *
。
分割字符串是一项相当常见的任务,在推出复杂的解决方案之前,请先进行一些(重新)搜索。
C
C ++
查看std::string
及其成员函数,例如std::string::find()