Versuchen, fügen ein element in einem array mit Zeigern, aber nicht erfolgreich
Mir helfen....Es gibt keine compile-Zeit-Fehler, aber es gibt einige logische Fehler, die ich bin nicht in der Lage heraus zu Sortieren.
Input entnommen Nutzer ohne problem, aber die Elemente sind nicht immer eingefügt.
Die Ausgabe ist unverändert array, das die Benutzer eingegeben.
void insert(int*,int);
void main()
{
int a[10];
int i,n,pos,x,j,z;
clrscr();
printf("Enter Size Of an array: ");
scanf("%d",&n);
printf("Enter Elements of an array: ");
for(i=0;i<n;i++)
{
scanf("%d",a+i);
}
insert(a,n);
printf("\nArray after Insertion of elements at 2nd & 5th Position\n");
for(i=0;i<n;i++)
{
printf("\t%d\t",*a+i);
}
getch();
}
void insert(int *b, int n)
{
if(n>=1)
{
printf("Insert Element at 2nd Position: ");
scanf("%d",b+1);
}
if(n>=4)
{
printf("Insert Element at 5th Position: ");
scanf("%d",b+4);
}
}
In welcher Weise ist das Programm-Verhalten unerwartete? Vielleicht möchten Sie anrufen, legen Sie zwei mal. Btw, was passiert, wenn der Benutzer eine n, die größer als 10?
Was Wert ist
Ich denke, Sie ersetzen Sie einfach die Elemente in der 2. oder 5. position und nicht selbst einen Wert einzugeben. Versuchen Sie, Ihre dynamischen array verwenden oder eine dynamische Liste statt. Siehe diesen thread: stackoverflow.com/questions/4063857/dynamic-list-in-ansi-c.
Ein Platz rechts von der Spitze, die im März direkt in undefined behavior ist jede
WhozCraig, n == 10 ist problematisch.
Was Wert ist
n
?Ich denke, Sie ersetzen Sie einfach die Elemente in der 2. oder 5. position und nicht selbst einen Wert einzugeben. Versuchen Sie, Ihre dynamischen array verwenden oder eine dynamische Liste statt. Siehe diesen thread: stackoverflow.com/questions/4063857/dynamic-list-in-ansi-c.
Ein Platz rechts von der Spitze, die im März direkt in undefined behavior ist jede
n
mehr als 10. Und vielleicht überprüfen die Ergebnisse dieser scanf()
ruft nur, wissen Sie, den Nervenkitzel.WhozCraig, n == 10 ist problematisch.
InformationsquelleAutor Aman Tewary | 2013-08-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
"Ausgang ist unverändert array, das die Benutzer eingegeben."
Update :-
Zur info..das ist nicht einlegen, das ist einfach ein über-schreiben !
Für den Einschub könnte man etwas wie folgt aus :
Und seine nicht überschreiben, es (das ursprüngliche problem) war eine erhöht Additiv den Betrieb auf einen einzelnen Wert im array, nämlich
a[0]
. Ein Teil der Grund, warum wir post ChangeThis ToThis, wie es ist in der Regel anwendbar, zusammen mit der Erklärung warum.aktualisiert
also du meinst, der OP-code eigentlich einfügen am 2./5. position ?
Relativ zu den 0-offset als
1st
position. ja. Wenn durch einführen-mit-schalten Sie Ihre aktualisierte-code ist dabei, keine. Unter diesem Deckmantel Sie sind richtig, dass es angemessener wäre zu sagen, dass der OPs-code ", schreibt" der 2./5. Positionen, während Sie code "Einsätze" gibt. Dein Punkt ist zu verstehen, und wir können sicherlich Zustimmen, die OP war nicht kristallklar, Ihre definition von "insert" .InformationsquelleAutor P0W
Ihre Ausgabe ist falsch, und es ist verursacht durch
*a+i
interpretiert als(*a)+i
. Dies zeigt sich auch, ohne jegliche änderung, wenn Sie bei der Eingabe etwas anderes als eine direkte Folge:gibt die Ausgabe:
das ist eindeutig nicht richtig.
Die Lösung ist, wie erwähnt, noch ein paar Antworten zu wickeln Sie Ihre Zeiger-Arithmetik mit paranthesis:
*(a+i)
.danke Mann...wirklich zu schätzen, Mann.
InformationsquelleAutor Mats Petersson
Sollten Sie versuchen, mit Klammern um a+i, z.B.
Ja, der andere Kerl antwortete schneller als ich. Ich schrieb ein Beispielprogramm, um zu zeigen, in einem größeren Kontext 🙂
InformationsquelleAutor manchicken
Die Klammer um das "(a+i)" sind von größter Bedeutung, da er zusammen mit der asterisk-es gibt den Wert innerhalb dieser Adresse. Fehler wie diese sind schwer zu finden, wie Sie sind sehr klein, haben aber einen großen Einfluss auf den code.
InformationsquelleAutor Souriya Roy
Endlich habe ich das problem gelöst mit Hilfe von Fehler aufgezeigt von @P0W und @Matten und auch anwenden Konzept einfügen element an jede beliebige Benutzer-definierte position. Danke Jungs!!
Hier also der Korrigierte code. (Und es ist element einfügen und nicht ersetzen).
InformationsquelleAutor Aman Tewary