scanf() running endlessly, program stops running on a statement












0















This is the code for BFT(breadth first traversal) for a connected graph.
I run the code then I successfully make the adjacency list and also successfully print the adjacency list but after it program stops at when I take input from user to start the BFS from that inputed node.
scanf() is running infinitely or other error I can't able to identify.



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

typedef struct root //the adjacency list which have all the vertices
{
int info;
struct adjacent *adj;
struct root *next;
} root;
typedef struct adjacent //Linked list which store adjacent nodes of any nodes in adj list.
{
int info;
struct adjacent *adj;
} adjacent;

typedef struct node // to make queue to store nodes to be explored.
{
int info;
struct node *next;
} nodeQ;

void insert(nodeQ **ft,nodeQ **rr,int n) // insert func of Q
{
nodeQ * new=(nodeQ *)malloc(sizeof(nodeQ));
new->info = n;
new->next = NULL;
if(*ft == NULL)
{
*ft=new;
*rr=new;
}
else
{
(*rr)->next = new;
*rr = new;
}
}
int delete(nodeQ **ft,nodeQ **rr) //delete func of Q
{
int value=(*ft)->info;
nodeQ *temp=*ft;
*ft=(*ft)->next;
free(temp);
if(*ft==NULL)
*rr=NULL;
return value;
}

void BFS(int total_nodes,int node_tobe_explored,root *head,nodeQ **ft,nodeQ **rr)
{
printf("ff");
int * visited=(int *)malloc(sizeof(int)*total_nodes);
for(int i=0;i<total_nodes;i++)
visited[i]=0; //initialize all value in visited array with 0
printf("aa");
visited[node_tobe_explored] = 1;
printf("%d",node_tobe_explored);
while(1) // this loop iterates until all nodes are not explored.
{
root *t=head;
while(t->info != node_tobe_explored) // this find the node address(t) of the node_tobe_explored.
t=t->next;
printf("bb");
adjacent * adj_node = t->adj;

while(adj_node)
{
if(visited[adj_node->info] == 0) //if that adjacent node is not visited then also we visit it.
{
int adj_node_val = adj_node->info;
visited[adj_node_val] = 1;
insert(ft,rr,adj_node_val);
printf(", %d",adj_node_val);
}
}
printf("cc");
if(*rr==NULL) //if Q is empty, means all nodes are explored, so we return.
return;
else //otherwise explore first node present in Q
node_tobe_explored = delete(ft,rr);
}
}

int main()
{
char ch;
int no,tot_nodes,start;
nodeQ *front=NULL,*rear=NULL;
printf("enter the no. of nodes: ");
scanf("%d",&tot_nodes);
root *head = NULL;
no = tot_nodes;
while(no!=0)
{ //to make the main chain of adjacency list.
root *new=(root *)malloc(sizeof(root));
new->info = no;
new->adj = NULL;
new->next = head;
head = new;
no--;
}
root *temp = head;
while(temp!=NULL)
{ // to add the adjacent nodes to main chain.

printf("enter the nodes adjacent to %d:n",temp->info);
do
{
int element;
printf(" enter node: ");
scanf("%d",&element);
adjacent *nw = (adjacent *)malloc(sizeof(adjacent));
nw->info = element;
nw->adj = temp->adj;
temp->adj = nw;

printf("more adjacent nodes y/n: ");
ch=getchar();
ch=getchar();
}while(ch=='Y'||ch=='y');

temp=temp->next;
}
printf("display of the structur of the linked list formed:n");
root * head1=head;
while(head1) // to display the formed adj. list.
{
printf("%d--",head1->info);
adjacent *t = head1->adj;
while(t)
{
printf("%d,",t->info);
t=t->adj;
}
printf("n");
head1=head1->next;
}

do
{
printf("enter the node value from which you want to start BFS: ");
printf("before [enter image description here][1]");
int st;
scanf("%d",&st);
printf("after");
BFS(tot_nodes,st,head,&front,&rear); //calling BFS func.
printf("do you want to print more traversals y/n: ");
ch=getchar();
ch=getchar();
}while(ch=='Y'||ch=='y');
}









share|improve this question























  • Post your sample input.

    – chux
    Nov 22 '18 at 12:39











  • Insure node_tobe_explored < total_nodes.

    – chux
    Nov 22 '18 at 12:40











  • With root *t=head; while(t->info ..., what if head == NULL?

    – chux
    Nov 22 '18 at 12:41













  • With while(t->info != node_tobe_explored) t=t->next;, what do you want to happen should t->info != node_tobe_explored never true?

    – chux
    Nov 22 '18 at 12:45











  • With while(adj_node) { if(visited[adj_node->info] == 0) ....,is an infinite loop when visited[adj_node->info] == 0 is false.

    – chux
    Nov 22 '18 at 12:47


















0















This is the code for BFT(breadth first traversal) for a connected graph.
I run the code then I successfully make the adjacency list and also successfully print the adjacency list but after it program stops at when I take input from user to start the BFS from that inputed node.
scanf() is running infinitely or other error I can't able to identify.



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

typedef struct root //the adjacency list which have all the vertices
{
int info;
struct adjacent *adj;
struct root *next;
} root;
typedef struct adjacent //Linked list which store adjacent nodes of any nodes in adj list.
{
int info;
struct adjacent *adj;
} adjacent;

typedef struct node // to make queue to store nodes to be explored.
{
int info;
struct node *next;
} nodeQ;

void insert(nodeQ **ft,nodeQ **rr,int n) // insert func of Q
{
nodeQ * new=(nodeQ *)malloc(sizeof(nodeQ));
new->info = n;
new->next = NULL;
if(*ft == NULL)
{
*ft=new;
*rr=new;
}
else
{
(*rr)->next = new;
*rr = new;
}
}
int delete(nodeQ **ft,nodeQ **rr) //delete func of Q
{
int value=(*ft)->info;
nodeQ *temp=*ft;
*ft=(*ft)->next;
free(temp);
if(*ft==NULL)
*rr=NULL;
return value;
}

void BFS(int total_nodes,int node_tobe_explored,root *head,nodeQ **ft,nodeQ **rr)
{
printf("ff");
int * visited=(int *)malloc(sizeof(int)*total_nodes);
for(int i=0;i<total_nodes;i++)
visited[i]=0; //initialize all value in visited array with 0
printf("aa");
visited[node_tobe_explored] = 1;
printf("%d",node_tobe_explored);
while(1) // this loop iterates until all nodes are not explored.
{
root *t=head;
while(t->info != node_tobe_explored) // this find the node address(t) of the node_tobe_explored.
t=t->next;
printf("bb");
adjacent * adj_node = t->adj;

while(adj_node)
{
if(visited[adj_node->info] == 0) //if that adjacent node is not visited then also we visit it.
{
int adj_node_val = adj_node->info;
visited[adj_node_val] = 1;
insert(ft,rr,adj_node_val);
printf(", %d",adj_node_val);
}
}
printf("cc");
if(*rr==NULL) //if Q is empty, means all nodes are explored, so we return.
return;
else //otherwise explore first node present in Q
node_tobe_explored = delete(ft,rr);
}
}

int main()
{
char ch;
int no,tot_nodes,start;
nodeQ *front=NULL,*rear=NULL;
printf("enter the no. of nodes: ");
scanf("%d",&tot_nodes);
root *head = NULL;
no = tot_nodes;
while(no!=0)
{ //to make the main chain of adjacency list.
root *new=(root *)malloc(sizeof(root));
new->info = no;
new->adj = NULL;
new->next = head;
head = new;
no--;
}
root *temp = head;
while(temp!=NULL)
{ // to add the adjacent nodes to main chain.

printf("enter the nodes adjacent to %d:n",temp->info);
do
{
int element;
printf(" enter node: ");
scanf("%d",&element);
adjacent *nw = (adjacent *)malloc(sizeof(adjacent));
nw->info = element;
nw->adj = temp->adj;
temp->adj = nw;

printf("more adjacent nodes y/n: ");
ch=getchar();
ch=getchar();
}while(ch=='Y'||ch=='y');

temp=temp->next;
}
printf("display of the structur of the linked list formed:n");
root * head1=head;
while(head1) // to display the formed adj. list.
{
printf("%d--",head1->info);
adjacent *t = head1->adj;
while(t)
{
printf("%d,",t->info);
t=t->adj;
}
printf("n");
head1=head1->next;
}

do
{
printf("enter the node value from which you want to start BFS: ");
printf("before [enter image description here][1]");
int st;
scanf("%d",&st);
printf("after");
BFS(tot_nodes,st,head,&front,&rear); //calling BFS func.
printf("do you want to print more traversals y/n: ");
ch=getchar();
ch=getchar();
}while(ch=='Y'||ch=='y');
}









share|improve this question























  • Post your sample input.

    – chux
    Nov 22 '18 at 12:39











  • Insure node_tobe_explored < total_nodes.

    – chux
    Nov 22 '18 at 12:40











  • With root *t=head; while(t->info ..., what if head == NULL?

    – chux
    Nov 22 '18 at 12:41













  • With while(t->info != node_tobe_explored) t=t->next;, what do you want to happen should t->info != node_tobe_explored never true?

    – chux
    Nov 22 '18 at 12:45











  • With while(adj_node) { if(visited[adj_node->info] == 0) ....,is an infinite loop when visited[adj_node->info] == 0 is false.

    – chux
    Nov 22 '18 at 12:47
















0












0








0








This is the code for BFT(breadth first traversal) for a connected graph.
I run the code then I successfully make the adjacency list and also successfully print the adjacency list but after it program stops at when I take input from user to start the BFS from that inputed node.
scanf() is running infinitely or other error I can't able to identify.



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

typedef struct root //the adjacency list which have all the vertices
{
int info;
struct adjacent *adj;
struct root *next;
} root;
typedef struct adjacent //Linked list which store adjacent nodes of any nodes in adj list.
{
int info;
struct adjacent *adj;
} adjacent;

typedef struct node // to make queue to store nodes to be explored.
{
int info;
struct node *next;
} nodeQ;

void insert(nodeQ **ft,nodeQ **rr,int n) // insert func of Q
{
nodeQ * new=(nodeQ *)malloc(sizeof(nodeQ));
new->info = n;
new->next = NULL;
if(*ft == NULL)
{
*ft=new;
*rr=new;
}
else
{
(*rr)->next = new;
*rr = new;
}
}
int delete(nodeQ **ft,nodeQ **rr) //delete func of Q
{
int value=(*ft)->info;
nodeQ *temp=*ft;
*ft=(*ft)->next;
free(temp);
if(*ft==NULL)
*rr=NULL;
return value;
}

void BFS(int total_nodes,int node_tobe_explored,root *head,nodeQ **ft,nodeQ **rr)
{
printf("ff");
int * visited=(int *)malloc(sizeof(int)*total_nodes);
for(int i=0;i<total_nodes;i++)
visited[i]=0; //initialize all value in visited array with 0
printf("aa");
visited[node_tobe_explored] = 1;
printf("%d",node_tobe_explored);
while(1) // this loop iterates until all nodes are not explored.
{
root *t=head;
while(t->info != node_tobe_explored) // this find the node address(t) of the node_tobe_explored.
t=t->next;
printf("bb");
adjacent * adj_node = t->adj;

while(adj_node)
{
if(visited[adj_node->info] == 0) //if that adjacent node is not visited then also we visit it.
{
int adj_node_val = adj_node->info;
visited[adj_node_val] = 1;
insert(ft,rr,adj_node_val);
printf(", %d",adj_node_val);
}
}
printf("cc");
if(*rr==NULL) //if Q is empty, means all nodes are explored, so we return.
return;
else //otherwise explore first node present in Q
node_tobe_explored = delete(ft,rr);
}
}

int main()
{
char ch;
int no,tot_nodes,start;
nodeQ *front=NULL,*rear=NULL;
printf("enter the no. of nodes: ");
scanf("%d",&tot_nodes);
root *head = NULL;
no = tot_nodes;
while(no!=0)
{ //to make the main chain of adjacency list.
root *new=(root *)malloc(sizeof(root));
new->info = no;
new->adj = NULL;
new->next = head;
head = new;
no--;
}
root *temp = head;
while(temp!=NULL)
{ // to add the adjacent nodes to main chain.

printf("enter the nodes adjacent to %d:n",temp->info);
do
{
int element;
printf(" enter node: ");
scanf("%d",&element);
adjacent *nw = (adjacent *)malloc(sizeof(adjacent));
nw->info = element;
nw->adj = temp->adj;
temp->adj = nw;

printf("more adjacent nodes y/n: ");
ch=getchar();
ch=getchar();
}while(ch=='Y'||ch=='y');

temp=temp->next;
}
printf("display of the structur of the linked list formed:n");
root * head1=head;
while(head1) // to display the formed adj. list.
{
printf("%d--",head1->info);
adjacent *t = head1->adj;
while(t)
{
printf("%d,",t->info);
t=t->adj;
}
printf("n");
head1=head1->next;
}

do
{
printf("enter the node value from which you want to start BFS: ");
printf("before [enter image description here][1]");
int st;
scanf("%d",&st);
printf("after");
BFS(tot_nodes,st,head,&front,&rear); //calling BFS func.
printf("do you want to print more traversals y/n: ");
ch=getchar();
ch=getchar();
}while(ch=='Y'||ch=='y');
}









share|improve this question














This is the code for BFT(breadth first traversal) for a connected graph.
I run the code then I successfully make the adjacency list and also successfully print the adjacency list but after it program stops at when I take input from user to start the BFS from that inputed node.
scanf() is running infinitely or other error I can't able to identify.



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

typedef struct root //the adjacency list which have all the vertices
{
int info;
struct adjacent *adj;
struct root *next;
} root;
typedef struct adjacent //Linked list which store adjacent nodes of any nodes in adj list.
{
int info;
struct adjacent *adj;
} adjacent;

typedef struct node // to make queue to store nodes to be explored.
{
int info;
struct node *next;
} nodeQ;

void insert(nodeQ **ft,nodeQ **rr,int n) // insert func of Q
{
nodeQ * new=(nodeQ *)malloc(sizeof(nodeQ));
new->info = n;
new->next = NULL;
if(*ft == NULL)
{
*ft=new;
*rr=new;
}
else
{
(*rr)->next = new;
*rr = new;
}
}
int delete(nodeQ **ft,nodeQ **rr) //delete func of Q
{
int value=(*ft)->info;
nodeQ *temp=*ft;
*ft=(*ft)->next;
free(temp);
if(*ft==NULL)
*rr=NULL;
return value;
}

void BFS(int total_nodes,int node_tobe_explored,root *head,nodeQ **ft,nodeQ **rr)
{
printf("ff");
int * visited=(int *)malloc(sizeof(int)*total_nodes);
for(int i=0;i<total_nodes;i++)
visited[i]=0; //initialize all value in visited array with 0
printf("aa");
visited[node_tobe_explored] = 1;
printf("%d",node_tobe_explored);
while(1) // this loop iterates until all nodes are not explored.
{
root *t=head;
while(t->info != node_tobe_explored) // this find the node address(t) of the node_tobe_explored.
t=t->next;
printf("bb");
adjacent * adj_node = t->adj;

while(adj_node)
{
if(visited[adj_node->info] == 0) //if that adjacent node is not visited then also we visit it.
{
int adj_node_val = adj_node->info;
visited[adj_node_val] = 1;
insert(ft,rr,adj_node_val);
printf(", %d",adj_node_val);
}
}
printf("cc");
if(*rr==NULL) //if Q is empty, means all nodes are explored, so we return.
return;
else //otherwise explore first node present in Q
node_tobe_explored = delete(ft,rr);
}
}

int main()
{
char ch;
int no,tot_nodes,start;
nodeQ *front=NULL,*rear=NULL;
printf("enter the no. of nodes: ");
scanf("%d",&tot_nodes);
root *head = NULL;
no = tot_nodes;
while(no!=0)
{ //to make the main chain of adjacency list.
root *new=(root *)malloc(sizeof(root));
new->info = no;
new->adj = NULL;
new->next = head;
head = new;
no--;
}
root *temp = head;
while(temp!=NULL)
{ // to add the adjacent nodes to main chain.

printf("enter the nodes adjacent to %d:n",temp->info);
do
{
int element;
printf(" enter node: ");
scanf("%d",&element);
adjacent *nw = (adjacent *)malloc(sizeof(adjacent));
nw->info = element;
nw->adj = temp->adj;
temp->adj = nw;

printf("more adjacent nodes y/n: ");
ch=getchar();
ch=getchar();
}while(ch=='Y'||ch=='y');

temp=temp->next;
}
printf("display of the structur of the linked list formed:n");
root * head1=head;
while(head1) // to display the formed adj. list.
{
printf("%d--",head1->info);
adjacent *t = head1->adj;
while(t)
{
printf("%d,",t->info);
t=t->adj;
}
printf("n");
head1=head1->next;
}

do
{
printf("enter the node value from which you want to start BFS: ");
printf("before [enter image description here][1]");
int st;
scanf("%d",&st);
printf("after");
BFS(tot_nodes,st,head,&front,&rear); //calling BFS func.
printf("do you want to print more traversals y/n: ");
ch=getchar();
ch=getchar();
}while(ch=='Y'||ch=='y');
}






c data-structures






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 22 '18 at 10:54









Suraj PatniSuraj Patni

12




12













  • Post your sample input.

    – chux
    Nov 22 '18 at 12:39











  • Insure node_tobe_explored < total_nodes.

    – chux
    Nov 22 '18 at 12:40











  • With root *t=head; while(t->info ..., what if head == NULL?

    – chux
    Nov 22 '18 at 12:41













  • With while(t->info != node_tobe_explored) t=t->next;, what do you want to happen should t->info != node_tobe_explored never true?

    – chux
    Nov 22 '18 at 12:45











  • With while(adj_node) { if(visited[adj_node->info] == 0) ....,is an infinite loop when visited[adj_node->info] == 0 is false.

    – chux
    Nov 22 '18 at 12:47





















  • Post your sample input.

    – chux
    Nov 22 '18 at 12:39











  • Insure node_tobe_explored < total_nodes.

    – chux
    Nov 22 '18 at 12:40











  • With root *t=head; while(t->info ..., what if head == NULL?

    – chux
    Nov 22 '18 at 12:41













  • With while(t->info != node_tobe_explored) t=t->next;, what do you want to happen should t->info != node_tobe_explored never true?

    – chux
    Nov 22 '18 at 12:45











  • With while(adj_node) { if(visited[adj_node->info] == 0) ....,is an infinite loop when visited[adj_node->info] == 0 is false.

    – chux
    Nov 22 '18 at 12:47



















Post your sample input.

– chux
Nov 22 '18 at 12:39





Post your sample input.

– chux
Nov 22 '18 at 12:39













Insure node_tobe_explored < total_nodes.

– chux
Nov 22 '18 at 12:40





Insure node_tobe_explored < total_nodes.

– chux
Nov 22 '18 at 12:40













With root *t=head; while(t->info ..., what if head == NULL?

– chux
Nov 22 '18 at 12:41







With root *t=head; while(t->info ..., what if head == NULL?

– chux
Nov 22 '18 at 12:41















With while(t->info != node_tobe_explored) t=t->next;, what do you want to happen should t->info != node_tobe_explored never true?

– chux
Nov 22 '18 at 12:45





With while(t->info != node_tobe_explored) t=t->next;, what do you want to happen should t->info != node_tobe_explored never true?

– chux
Nov 22 '18 at 12:45













With while(adj_node) { if(visited[adj_node->info] == 0) ....,is an infinite loop when visited[adj_node->info] == 0 is false.

– chux
Nov 22 '18 at 12:47







With while(adj_node) { if(visited[adj_node->info] == 0) ....,is an infinite loop when visited[adj_node->info] == 0 is false.

– chux
Nov 22 '18 at 12:47














1 Answer
1






active

oldest

votes


















0














Excerpt from OPs source code:



    printf("do you want to print more traversals y/n: ");
ch=getchar();
ch=getchar();
}while(ch=='Y'||ch=='y');


The intention was probably to read a letter (y or n) and the n which confirmed the input.



So, the 2ndch=getchar(); (for ENTER) overrides the previously read letter. The following fix would change this:



    printf("do you want to print more traversals y/n: ");
ch=getchar();
getchar(); /* ignore the returned value - it's just to consume 'n'. */
}while(ch=='Y'||ch=='y');


Btw. this is something which should have been uncovered by a step-wise debugging of the cited four lines...






share|improve this answer
























  • I make the changes. still showing same thing. but the line printf("after"); still not running

    – Suraj Patni
    Nov 22 '18 at 11:17













  • @SurajPatni It might be that I didn't uncover all issues of your code. At a second glance, I saw the double ch=getchar() issue at another location also. (Look for printf("more adjacent nodes y/n: ");.) Additionally, you urgently should check the result of scanf(). If it fails, it leaves variables unmodified (i.e. uninitialized in certain cases) but it returns the successful modified arguments which you don't check.

    – Scheff
    Nov 22 '18 at 11:22













Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53429368%2fscanf-running-endlessly-program-stops-running-on-a-statement%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes









0














Excerpt from OPs source code:



    printf("do you want to print more traversals y/n: ");
ch=getchar();
ch=getchar();
}while(ch=='Y'||ch=='y');


The intention was probably to read a letter (y or n) and the n which confirmed the input.



So, the 2ndch=getchar(); (for ENTER) overrides the previously read letter. The following fix would change this:



    printf("do you want to print more traversals y/n: ");
ch=getchar();
getchar(); /* ignore the returned value - it's just to consume 'n'. */
}while(ch=='Y'||ch=='y');


Btw. this is something which should have been uncovered by a step-wise debugging of the cited four lines...






share|improve this answer
























  • I make the changes. still showing same thing. but the line printf("after"); still not running

    – Suraj Patni
    Nov 22 '18 at 11:17













  • @SurajPatni It might be that I didn't uncover all issues of your code. At a second glance, I saw the double ch=getchar() issue at another location also. (Look for printf("more adjacent nodes y/n: ");.) Additionally, you urgently should check the result of scanf(). If it fails, it leaves variables unmodified (i.e. uninitialized in certain cases) but it returns the successful modified arguments which you don't check.

    – Scheff
    Nov 22 '18 at 11:22


















0














Excerpt from OPs source code:



    printf("do you want to print more traversals y/n: ");
ch=getchar();
ch=getchar();
}while(ch=='Y'||ch=='y');


The intention was probably to read a letter (y or n) and the n which confirmed the input.



So, the 2ndch=getchar(); (for ENTER) overrides the previously read letter. The following fix would change this:



    printf("do you want to print more traversals y/n: ");
ch=getchar();
getchar(); /* ignore the returned value - it's just to consume 'n'. */
}while(ch=='Y'||ch=='y');


Btw. this is something which should have been uncovered by a step-wise debugging of the cited four lines...






share|improve this answer
























  • I make the changes. still showing same thing. but the line printf("after"); still not running

    – Suraj Patni
    Nov 22 '18 at 11:17













  • @SurajPatni It might be that I didn't uncover all issues of your code. At a second glance, I saw the double ch=getchar() issue at another location also. (Look for printf("more adjacent nodes y/n: ");.) Additionally, you urgently should check the result of scanf(). If it fails, it leaves variables unmodified (i.e. uninitialized in certain cases) but it returns the successful modified arguments which you don't check.

    – Scheff
    Nov 22 '18 at 11:22
















0












0








0







Excerpt from OPs source code:



    printf("do you want to print more traversals y/n: ");
ch=getchar();
ch=getchar();
}while(ch=='Y'||ch=='y');


The intention was probably to read a letter (y or n) and the n which confirmed the input.



So, the 2ndch=getchar(); (for ENTER) overrides the previously read letter. The following fix would change this:



    printf("do you want to print more traversals y/n: ");
ch=getchar();
getchar(); /* ignore the returned value - it's just to consume 'n'. */
}while(ch=='Y'||ch=='y');


Btw. this is something which should have been uncovered by a step-wise debugging of the cited four lines...






share|improve this answer













Excerpt from OPs source code:



    printf("do you want to print more traversals y/n: ");
ch=getchar();
ch=getchar();
}while(ch=='Y'||ch=='y');


The intention was probably to read a letter (y or n) and the n which confirmed the input.



So, the 2ndch=getchar(); (for ENTER) overrides the previously read letter. The following fix would change this:



    printf("do you want to print more traversals y/n: ");
ch=getchar();
getchar(); /* ignore the returned value - it's just to consume 'n'. */
}while(ch=='Y'||ch=='y');


Btw. this is something which should have been uncovered by a step-wise debugging of the cited four lines...







share|improve this answer












share|improve this answer



share|improve this answer










answered Nov 22 '18 at 11:07









ScheffScheff

8,11321426




8,11321426













  • I make the changes. still showing same thing. but the line printf("after"); still not running

    – Suraj Patni
    Nov 22 '18 at 11:17













  • @SurajPatni It might be that I didn't uncover all issues of your code. At a second glance, I saw the double ch=getchar() issue at another location also. (Look for printf("more adjacent nodes y/n: ");.) Additionally, you urgently should check the result of scanf(). If it fails, it leaves variables unmodified (i.e. uninitialized in certain cases) but it returns the successful modified arguments which you don't check.

    – Scheff
    Nov 22 '18 at 11:22





















  • I make the changes. still showing same thing. but the line printf("after"); still not running

    – Suraj Patni
    Nov 22 '18 at 11:17













  • @SurajPatni It might be that I didn't uncover all issues of your code. At a second glance, I saw the double ch=getchar() issue at another location also. (Look for printf("more adjacent nodes y/n: ");.) Additionally, you urgently should check the result of scanf(). If it fails, it leaves variables unmodified (i.e. uninitialized in certain cases) but it returns the successful modified arguments which you don't check.

    – Scheff
    Nov 22 '18 at 11:22



















I make the changes. still showing same thing. but the line printf("after"); still not running

– Suraj Patni
Nov 22 '18 at 11:17







I make the changes. still showing same thing. but the line printf("after"); still not running

– Suraj Patni
Nov 22 '18 at 11:17















@SurajPatni It might be that I didn't uncover all issues of your code. At a second glance, I saw the double ch=getchar() issue at another location also. (Look for printf("more adjacent nodes y/n: ");.) Additionally, you urgently should check the result of scanf(). If it fails, it leaves variables unmodified (i.e. uninitialized in certain cases) but it returns the successful modified arguments which you don't check.

– Scheff
Nov 22 '18 at 11:22







@SurajPatni It might be that I didn't uncover all issues of your code. At a second glance, I saw the double ch=getchar() issue at another location also. (Look for printf("more adjacent nodes y/n: ");.) Additionally, you urgently should check the result of scanf(). If it fails, it leaves variables unmodified (i.e. uninitialized in certain cases) but it returns the successful modified arguments which you don't check.

– Scheff
Nov 22 '18 at 11:22






















draft saved

draft discarded




















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53429368%2fscanf-running-endlessly-program-stops-running-on-a-statement%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







這個網誌中的熱門文章

Xamarin.form Move up view when keyboard appear

Post-Redirect-Get with Spring WebFlux and Thymeleaf

Anylogic : not able to use stopDelay()