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,您可能已经自己发现了错误。