Bonjour à tous!
Désolé ne pas faire original, mais j'ai un problème avec le scanf dans une boucle (enfin, je pense que c'est à cause du scanf que ça ne marche pas...).
Il s'agit d'une fonction toute bête qui demande à l'utilisateur les valeurs d'une matrice et les rentre dans un tableau
J'ai deux problèmes avec cette fonction:
1 --> Il demande 2 fois "Are there elements in the matrix which are not null? (y/n)"
2 --> Les conditions du while ne sont pas prises en compte, c'est-à-dire que si j'ai une matrice 3x3 et que je veux rentrer l'élément 5,6 par exemple (donc en dehors de la matrice), le programme ne dira rien et continuera, et donc bien sûr il plante quelques lignes plus tard! Alors que normalement il est censé reposer la question si l'utilisateur rentre de mauvaises valeurs.
voici le programme en question:
La fonction purge() est la très classique fonction:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 float **newArray(float** T,int r,int c){ char isNotNull, test='y'; float val; int i,j; printf("All the elements of the matrix were intialized to 0. "); do{ printf("Are there elements in the matrix which are not null? (y/n) "); scanf("%c",&isNotNull); purge(); }while(isNotNull!='y' && isNotNull!='n'); if(isNotNull=='y'){ printf("Please tell which elements of the matrix are not null :\n\n"); while(test=='y'){ do{ printf("Enter the row: "); scanf("%d",&i); purge(); }while(i<1 && i>r); do{ printf("Enter the column: "); scanf("%d",&j); purge(); }while(j<1 && j>c); printf("Enter the value of the element (%d,%d) : ",i,j); scanf("%f",&val); purge(); T[i-1][j-1]= val; do{ printf("Is there an other non-null element inside the matrix? "); scanf("%c",&test); purge(); }while(test!='y' && test!='n'); } } return T; }
Si vous avez la solution à ce problème, merci de m'aider parce que là je suis complètement largué...j'ai essayé plusieurs choses, en vain.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 void fpurge(FILE *fp) { int c; while ((c = fgetc(fp)) != '\n' & c != EOF) { } } void purge(void) { fpurge(stdin); }
Merci !![]()
Partager