gpt4 book ai didi

c - 未初始化(排队)就使用的变量

转载 作者:太空宇宙 更新时间:2023-11-04 03:51:58 25 4
gpt4 key购买 nike

我想创建一个接受多个输入的队列,直到它们检测到“完成”然后停止。

所以它就像输入是:

Pea 1
Pork 2
Cheese 4
done

然后返回菜单。这是我的代码。问题是我收到错误“运行时检查失败 #3 - 正在使用变量‘myJob’但未初始化。”知道为什么会这样吗?谢谢!

void multqueue(struct pqueue *pq, struct job myJob) {
struct job temp;
int i, j;

printf("Enter a name and save its priority: \n");
scanf("%s", &myJob.name);
if (strcmp (myJob.name , "done") == 1){
return;}
scanf("%d", &myJob.priority);

if (pq->front == -1) {
pq->front = 0;
}
pq->end++;
pq->node[pq->end] = myJob;
for (i = pq->front; i < pq->end; i++) {
for (j = i + 1; j <= pq->end; j++) {

// Prioritising the queue nodes by comparing priority
if (pq->node[i].priority > pq->node[j].priority) {
temp = pq->node[i];
pq->node[i] = pq->node[j];
pq->node[j] = temp;
} else if (pq->node[i].priority ==
pq->node[j].priority) {
}
}
}
return;
}

最佳答案

你没有向我们展示数据结构,但是这两行是自相矛盾的:

scanf("%s", &myJob.name);
if (strcmp(myJob.name, "done") == 1)

如果 strcmp() 调用正确,那么您应该只将 myJob.name 传递给 scanf()。不要将 & 放在字符数组名称的前面。如果作为 &myJob.name 传递给 scanf() 的参数是正确的,那么您应该读取单个字符 (%c)。

运行时警告信息很有趣;大多数系统不提供该级别的保护。我可以看到它可能被传递的数组地址混淆了。混淆在于 &myJob.namemyJob.name 的类型不同,即使地址的值相同。

您应该测试 scanf() 是否成功:

if (scanf("%s", myJob.name) != 1)
...oops — error of some sort...

如果您输入“Computer Programmer”,职位名称将仅为“Computer”。

此外,也不能保证 strcmp() 会返回 1。如果字符串相等,则返回 0;否则返回 0。如果排序时第一个字符串在第二个字符串之后,则返回未定义的正数;如果排序时,第一个字符串在第二个字符串之前,则返回未定义的负数。因此,有效的比较是:

if (strcmp(myJob.name, "done") == 0)  // name == done
if (strcmp(myJob.name, "done") != 0) // name != done
if (strcmp(myJob.name, "done") >= 0) // name >= done
if (strcmp(myJob.name, "done") <= 0) // name <= done
if (strcmp(myJob.name, "done") > 0) // name > done
if (strcmp(myJob.name, "done") < 0) // name < done

关于c - 未初始化(排队)就使用的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20019621/

25 4 0
文章推荐: c++ - 像 Qt 中的 Simulink 一样的信号流拖放
文章推荐: html - 填充不会填充
  • Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com