gpt4 book ai didi

c - 为什么函数没有被调用?

转载 作者:行者123 更新时间:2023-11-30 14:25:26 24 4
gpt4 key购买 nike

我正在用 C 语言编写以下程序。

该程序是一个邻接矩阵,它要求用户在节点之间设置连接,然后检查节点 A 和节点 B 之间是否存在连接。

# include <stdio.h>
# include <stdlib.h>

#define N 11
#define FALSE 0
#define TRUE 1

typedef int adj_mat[N][N]; /*defining adj_mat */

int path (adj_mat A, int u, int v);

主函数要求用户制作有向图,然后要求用户输入两个节点来检查节点 A 和节点 B 之间是否存在连接。

int main()
{
adj_mat Matrix; /*intializing a new graph adjacency matrix.
on this moment nodes are disconnected every cell contains zero */
int dadnode, sonnode; /*intializing dad node and son node*/

printf("Hello. Enter now the pairs of connected nodes.\n");
printf("enter EOF after finishing of connecting all the nodes\n");

do { /*here user enter the nodes to connect */
printf("Enter the number of first node\n");
scanf("%d", &dadnode);
printf("Enter the number of second node\n");
scanf("%d", &sonnode);

if ((dadnode < sonnode) && (sonnode <= N) && (dadnode > 0)) /*checking if nodes are legal*/
Matrix[dadnode][sonnode] = 1; /*if legal - connect*/
} while ( (dadnode != EOF ) && (sonnode != EOF)); /*until user enter EOF */

printf("Now enter u and v nodes to check if exists way from u node to we node\n");
/*here user enter the nodes to check */
printf("Enter the number of u node\n");
scanf("%d", &dadnode);
printf("Enter the number of v node\n");
scanf("%d", &sonnode);

if ((dadnode < sonnode) && (sonnode <= N) && (dadnode > 0)) /*checking if nodes are legal*/ {
if( path(Matrix,dadnode,sonnode) == TRUE ) /*if exisits way from u to v*/
printf ("Exists way from node u to node v ");
}
else printf ("Not exists way from node u to node v ");
}

如果存在从 u(爸爸节点)到 v(儿子节点)的路径,则以下函数返回 TRUE,否则返回 FALSE

int path (adj_mat A, int u, int v) {
if (v >= u) /*no sense to check if dad node yonger than son node or dad of himself */
return FALSE;
int nodenum; /*number of node*/
/* "nodenum = v - 1" because node v cannot be son of node >= v */
for(nodenum = v - 1; nodenum > 0; nodenum-- ) {
if (A[nodenum][v] == TRUE) /*dad detected*/
{
if (nodenum == u) {
return TRUE; //complete
} else if (path (A, u, nodenum)) {
return TRUE; //maybe dad is a node that we are looking for (recursion)
}
}
}
return FALSE; /*all parents of v node were cheked and noone of them isnt u node*/
}

最后,我在 gdb (ubuntu) 中运行它。

do {  /*here user enter the nodes to connect */
printf("Enter the number of first node\n");
scanf("%d", &dadnode);
printf("Enter the number of second node\n");
scanf("%d", &sonnode);

if ((dadnode < sonnode) && (sonnode <= N) && (dadnode > 0)) {/*checking if nodes are legal*/
Matrix[dadnode][sonnode] = 1; /*if legal - connect*/
}
} while ( (dadnode != EOF ) && (sonnode != EOF)); /*until user enter EOF */

为什么当我尝试通过按 Ctrl+d 停止此循环(从主函数)时,循环将继续并仅在找到一对数字(其中一个数字为 -1)后停止?

好的,输入“-1”,然后主函数应该调用path()函数来检查节点a和节点b是否连接。如果是,那么它应该根据path(Matrix,dadnode,sonnode)的结果输出一条消息。

但是,我没有收到此行为,而是收到消息“程序正常退出”。为什么我会收到此消息?

main函数是否调用了path()函数?我不确定我的代码中的错误是什么......

最佳答案

EOFstdio.h 中定义为 (-1),但是当您使用 Ctrl + 时D 发送 EOF 消息,您将发送不同的字符值 (4)。 (-1) 的 EOF 定义是由于文件结束或其他错误而失败的函数的返回值。因此,您不应将输入值(dadnodesonnode)与 EOF 进行比较,而应比较 scanf()< 的返回值EOF

scanf()的返回值是读取的项目数(在您的情况下,它应该仅为1),或EOF 如果用户发送 Ctrl + D(Windows 用户必须发送 Ctrl + Z)。

示例:

int dadnode, sonnode;
int result;

while (true)
{
result = scanf("%d", &dadnode);
if (result < 1) break;

result = scanf("%d", &sonnode);
if (result < 1) break;
}

关于c - 为什么函数没有被调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10369913/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com