Προς το περιεχόμενο

C Απορία σε DO-WHILE


smilefreeware

Προτεινόμενες αναρτήσεις

Δημοσ.

Στο παρακάτω DO-WHILE πρέπει να βάζεις αριθμούς μέχρι να βάλεις το -1, οπότε συνεχίζει εκτός DO-WHILE.

Αυτό που δεν καταλαβαίνω είναι γιατί βάζω το -1 και δεν συνεχίζει αλλά μου ζητάει ακόμη ένα input.

(Οι γνώσεις μου είναι σε DELPHI οπότε και αυτό που φτιάχνω είναι αρκετό)

 

#include <stdio.h>

int

main()

{

int x,i,N,a[100];

float f;

printf("write integers until number=-1\n");

 

N=0;

do {

scanf("%d\n", &x);

N=N+1; a[N]=x;

if (x<0) {N=N-1;}

}while (x!=-1);

}

Δημοσ.

Κατ' αρχάς βλέπω ένα λαθάκι, πρέπει να αυξήσεις το N αφού βάλεις την τιμή στο a[N] γιατί έτσι ξεκινάς από το a[1] και όχι το a[0] που είναι η αρχή του array. Οπότε άλλαξε το σε a[N]=x ; N=N+1 (το Ν=Ν+1 μπορείς να το γράψεις για ευκολία Ν++ και αν δεν κάνω λάθος θα δουλέψει και το a[N++]=x). Δεύτερον θα είναι καλύτερα το if να το βάλεις από την αρχή (μετά το scanf) οπότε θα είναι if (x >= 0) {a[N++]=x} αλλιώς απλά βγαίνει από το loop. Αν είναι -1 το x να σου πω την αλήθεια δεν βλέπω λόγο γιατί να μην βγει από το do-while.

Δημοσ.

Στο παρακάτω DO-WHILE πρέπει να βάζεις αριθμούς μέχρι να βάλεις το -1, οπότε συνεχίζει εκτός DO-WHILE.

Αυτό που δεν καταλαβαίνω είναι γιατί βάζω το -1 και δεν συνεχίζει αλλά μου ζητάει ακόμη ένα input.

(Οι γνώσεις μου είναι σε DELPHI οπότε και αυτό που φτιάχνω είναι αρκετό)

 

#include <stdio.h>

int

main()

{

int x,i,N,a[100];

float f;

printf("write integers until number=-1\n");

 

N=0;

do {

scanf("%d\n", &x);

N=N+1; a[N]=x;

if (x<0) {N=N-1;}

}while (x!=-1);

}

 

 

κάνε τις παρακάτω διορθώσεις

 

>
......
N=-1; //οι πίνακες στην C αρχίζουν από την θέση 0
do {
scanf("%d",&x);getchar();// το \n δημιουργεί το πρόβλημα
......

Δημοσ.

Thanks, παίδες αλλά το πρόβλημα επιμένει.

 

< N=-1; //οι πίνακες στην C αρχίζουν από την θέση 0 >

Είναι υπό έλεγχο το Ν, δεν υπάρχει πρόβλημα και είναι άσχετο από το loop.

Παρακάτω το πρόγραμμα συνεχίζει κανονικά και δίνει τα σωστά αποτελέσματα.

 

< scanf("%d",&x);getchar();// το \n δημιουργεί το πρόβλημα >

Τελικά απλώς πέταξα το \n και έφτιαξε.

Χωρίς να προσθέσω το getchar();

Thanks again.

Δημοσ.

>
#include <stdio.h>
int main()
{
int x,i,N,a[100];
float f;
printf("write integers until number=-1\n");

N=0; 
do 
{
	scanf("%d", &x); // χωρίς το \n!
	
	if (x >= 0)
	{
		a[N]=x;
		N=N+1;
	}
}while (x!=-1);

return 0;
}

 

edit: ακυρο δεν ειδα οτι το εφτιαξες.

Δημοσ.

>
  fflush( stdin );
  scanf("%d", &x); // χωρίς το \n!

Πρόσθεσε και αυτή τη γραμμή πριν την εισαγωγή του αριθμού (scanf()) ή οποία καθαρίζει τον buffer.

Δημοσ.

>
  fflush( stdin );
  scanf("%d", &x); // χωρίς το \n!

Πρόσθεσε και αυτή τη γραμμή πριν την εισαγωγή του αριθμού (scanf()) ή οποία καθαρίζει τον buffer.

 

διάβασε αυτό--->Link

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...