Console hängt sich auf
-
Hallo, ich habe hier einen Code geschrieben, der Funktioniert hat,
aber jetzt hängt es sich auf wenn ich bei der Eingabe die
zweite Zeile eingeben will...und ich finde das Problem nicht, könnt ihr mir helfen?Das Problem müsste ja bei matrix_read sein...aber da stimmt doch alles
Da wollte ich eine Plausibilitätsprüfung einbauen, damit er nur 1 und 0 einliesst.#include <stdio.h> #include <stdlib.h> #include "matrix_func.h" #include "matrix_io.h" main() { unsigned n; unsigned *a, *b, *c; printf ("Bitte gib die Anzahl der Knoten ein:\n"); scanf ("%u", &n); a = (unsigned *) calloc (n*n, sizeof(unsigned)); b = (unsigned *) calloc (n*n, sizeof(unsigned)); c = (unsigned *) calloc (n*n, sizeof(unsigned)); printf ("Bitte gib die Adjazenzmatrix zeilenweise ein:\n"); matrix_read(a,n); copy(a,b,n); mult(a, b, c, n); add(a, b, c, n); matrix_write(a,n); matrix_write(c,n); free(a); free(b); free(c); } int matrix_read (unsigned *a, unsigned n) { unsigned i,j; for (i=0; i<n; i++) { for (j=0; j<n; j++) { scanf ("%u", *(a+i*n+j)); } } return *a; } void copy(unsigned *a, unsigned *b, unsigned n) { unsigned i,j; for (i=0; i<n; i++) { for (j=0; j<n; j++) { *(b+i*n+j)=*(a+i*n+j); } } } void mult(unsigned *a, unsigned *b, unsigned *c, unsigned n) { unsigned i,j,k; for (i=0; i<n; i++) { for (j=0; j<n; j++) { *(c+i*n+j)=0; for (k=0; k<n; k++) *(c+i*n+j)=*(c+i*n+j)+(*(a+i*n+k))*(*(b+k*n+j)); } } } void add(unsigned *a, unsigned *b, unsigned *c, unsigned n) { unsigned i,j; for (i=0; i<n; i++) { for (j=0; j<n; j++) { *(c+i*n+j)=(*(a+i*n+j))+(*(b+i*n+j)); } } } void matrix_write(unsigned *a, unsigned n) { unsigned i,j; printf("Wegematrix:\n"); for (i=0; i<n; i++) { for (j=0; j<n; j++) printf ("%u ", *(a+i*n+j)); printf("\n"); } }
-
sag mal ich hab dir nicht zufällig voll functionsfähigen demo code gebaut oder?
http://www.c-plusplus.net/forum/viewtopic-var-t-is-258771-and-postdays-is-0-and-postorder-is-asc-and-start-is-0.html
-
doch hast du...und ich habe mich bedankt...das war ja auch wichtig für mich,
aber der prof hat zu uns gemeint, wir sollten es auf die weise machen, von daher kann ich auch nix für, obwohl ich deine variante besser findedanke nochmals
-
scanf braucht eine Adresse als Argument (Gab es keine Kompilerwarnungen?):
int matrix_read (unsigned *a, unsigned n) { (...) // scanf ("%u", *(a+i*n+j)); scanf ("%u", &a[i*n+j]); (...) }
-
naja wie auch immer also:
z.37
(a+(i*n+j)) statt *(a+i*n+j)
z.40
return 1; statt return *a;
z.37
if(*(a+(i*n+j))>='0' && *(a+(i*n+j))<='0'){ return 0; }
aber da sind sicher noch mehr so schnitzer drin...
-
aha...jetzt gehts komisch...wie es am anfangstand, hats irgendwie davor auch funktioniert^^
vielen vielen dank