C++ 程序没有 运行 正确
C++ program doesn't run correctly
我写了一个笔记程序。它读取一些笔记,保留它们并允许用户删除,select 或更新笔记。它正在编译和 运行ning,但它 运行 不正确。
我有这个结构:
struct List {
char title[101];
char text[501];
int cont;
struct List* next;
};typedef List list;
还有这些函数:
List* insert (List *l, char ti[101], char te[501]) {
List* new = (List*) malloc(sizeof(List));
strcpy (new -> title, ti);
strcpy (new -> text, te);
new -> next = l;
new -> cont = id;
id++;
return (new);
}
List* delete (List* l, int v) {
List *ant = NULL;
List *p = l;
while (p != NULL && p -> cont != v) {
ant = p;
p = p -> next;
}
if (p == NULL)
return l;
if (ant == NULL)
l = p -> next;
else
ant -> next = p -> next;
free(p);
return l;
}
void print (List *l) {
List *p;
for (p = l; p != NULL; p = p -> next){
cout << "\nTitle: " << p -> title << "\n";
cout << "Text: " << p -> text << "\n";
cout << "Code: " << p -> cont << "\n" << "\n";
}
}
在 int main
上,我插入并打印了几次,效果很好。但是当我想删除一个笔记时,它不会删除也不会得到错误代码。昨天它工作正常,但今天当我测试它时,没有任何工作正常。我不明白为什么它在工作,现在它停止了。
应要求,主程序:
List* ini(){
return (NULL);
}
int main() {
List *l;
char title[101];
char text[501];
char v;
List* L1 = ini();
cout << "\nTitle: ";
gets(title);
cout << "Text: ";
gets(text);
L1 = insert (L1,title,text);
fflush(stdin);
cout << "\nTitle: ";
gets(title);
cout << "Text: ";
gets(text);
L1 = insert (L1,title,text);
fflush(stdin);
cout << "\nTitle: ";
gets(title);
cout << "Text: ";
gets(text);
L1 = insert (L1,title,text);
print(L1);
cout << "Delete: ";
cin >> v;
L1 = delete(L1, v);
print(L1);
return(0);
}
注意:我重写了您的代码以不进行翻译,因此现在 delete
是一个名为 deleteItem
的有效函数。
您的直接问题是:
char v;
//...
cin >> v;
L1 = deleteItem(L1, v); // <-- v is a char,
但是
List* deleteItem (List* l, int v) {
当您应该传递 int 时,您将 char
变量传递给 deleteItem
。将 v
的类型更改为 int
。
正在发生的事情是您的 char
正在被转换为 int。因此,如果您输入 1
,则发送为 49,因为 1
的 ASCII 值是 49。
C++ 允许您做的一件事是在接近使用点的地方声明变量。如果您在更接近 deleteItem
函数调用的地方声明了 v
,您可能已经自己发现了错误。
我写了一个笔记程序。它读取一些笔记,保留它们并允许用户删除,select 或更新笔记。它正在编译和 运行ning,但它 运行 不正确。
我有这个结构:
struct List {
char title[101];
char text[501];
int cont;
struct List* next;
};typedef List list;
还有这些函数:
List* insert (List *l, char ti[101], char te[501]) {
List* new = (List*) malloc(sizeof(List));
strcpy (new -> title, ti);
strcpy (new -> text, te);
new -> next = l;
new -> cont = id;
id++;
return (new);
}
List* delete (List* l, int v) {
List *ant = NULL;
List *p = l;
while (p != NULL && p -> cont != v) {
ant = p;
p = p -> next;
}
if (p == NULL)
return l;
if (ant == NULL)
l = p -> next;
else
ant -> next = p -> next;
free(p);
return l;
}
void print (List *l) {
List *p;
for (p = l; p != NULL; p = p -> next){
cout << "\nTitle: " << p -> title << "\n";
cout << "Text: " << p -> text << "\n";
cout << "Code: " << p -> cont << "\n" << "\n";
}
}
在 int main
上,我插入并打印了几次,效果很好。但是当我想删除一个笔记时,它不会删除也不会得到错误代码。昨天它工作正常,但今天当我测试它时,没有任何工作正常。我不明白为什么它在工作,现在它停止了。
应要求,主程序:
List* ini(){
return (NULL);
}
int main() {
List *l;
char title[101];
char text[501];
char v;
List* L1 = ini();
cout << "\nTitle: ";
gets(title);
cout << "Text: ";
gets(text);
L1 = insert (L1,title,text);
fflush(stdin);
cout << "\nTitle: ";
gets(title);
cout << "Text: ";
gets(text);
L1 = insert (L1,title,text);
fflush(stdin);
cout << "\nTitle: ";
gets(title);
cout << "Text: ";
gets(text);
L1 = insert (L1,title,text);
print(L1);
cout << "Delete: ";
cin >> v;
L1 = delete(L1, v);
print(L1);
return(0);
}
注意:我重写了您的代码以不进行翻译,因此现在 delete
是一个名为 deleteItem
的有效函数。
您的直接问题是:
char v;
//...
cin >> v;
L1 = deleteItem(L1, v); // <-- v is a char,
但是
List* deleteItem (List* l, int v) {
当您应该传递 int 时,您将 char
变量传递给 deleteItem
。将 v
的类型更改为 int
。
正在发生的事情是您的 char
正在被转换为 int。因此,如果您输入 1
,则发送为 49,因为 1
的 ASCII 值是 49。
C++ 允许您做的一件事是在接近使用点的地方声明变量。如果您在更接近 deleteItem
函数调用的地方声明了 v
,您可能已经自己发现了错误。