2016-06-14 8 views
-2

Hallo, ich habe ein Projekt für morgen, das ich beenden möchte, aber ich bin fest. Ich bin ziemlich neu, also sei nicht harsch. Hauptsächlich möchte ich, dass mein Programm fragt, wie viele Nummern der Benutzer gespielt hat. Wie viel Geld, nachdem es nach den Lottozahlen fragt und dann in eine Grenze setzt, dann fragt es nach den Benutzernummern, setzt auf eine zweite Grenze und dann möchte ich die 2 von ihnen vergleichen und wenn sie eine gleiche Nummer haben wird zu "Summe" hinzugefügt.Segmentierungsfehler nach While-Schleife erhalten

#include <stdlib.h> 
    int main() 
{ 
int k[20],i; 
int k2[12],f; 
int numbers,sum,n,l,num; 
float money,winnings; 
l=0; 
sum=0; 
printf("How many numbers from 1 to 12?\n"); 
scanf("%d",&num); 
    printf("How much money?\n"); 
    scanf("%f",&money); 
    for (i=0;i<19;i++) 
    {printf("Give lottery numbers\n"); 
     scanf("%d",&k[i]);} 
while (l<num){ 
    printf("Give your numbers\n"); 
    scanf("%d", k2 + f); !!fixed!! 
     l++;} 
for (f=0;f<num;f++){ 
    for (i=0;i>19;i++){ !!fixed!! 
    if ((k[i])==(k2[f])) !!! and here i think its a mistake. 
{ 
sum=sum+1; 
    } 
    } 
} 
printf("You got %d numbers out of %d",sum,num); 
    if ((sum=1) && (num=1)); 
    {winnings=(money*2,5); 
     printf("Won %f",winnings);} 
    if ((sum=1) && (num=2)); 
    {winnings=(money*1); 
     printf("won %f",winnings);} 
    if ((sum=2) && (num=2)); 
    {winnings=(money*5); 
     printf("Won %f",winnings);} 
system("pause");} 
+2

Formatieren Sie zuerst dieses Chaos richtig. Wie es ist, ist es nicht lesbar. Dann: Was ist die Frage? Siehe [fragen]. – Olaf

+0

Nun, ich bin nicht ganz sicher, was du meinst Format, aber ich denke, ich habe es geschafft. –

+2

Das ist besser, aber es sieht immer noch schrecklich aus. Aus unerklärlichen Gründen verliert der Code an mehreren Stellen seine Einrückung und beginnt wieder am linken Rand. Die meisten Editoren verfügen über eine automatische Einrückfunktion. Erfahren Sie, wie Sie es verwenden. –

Antwort

1

scheint es nicht, dass f zu etwas initialisiert je. Daher

scanf("%d",k2[f]); 

Wird in undefinierten Verhalten führen, und ist die wahrscheinliche Ursache des Absturzes.

Zusätzlich müssen Sie Ihren Einzug korrigieren. Außerdem ist Ihre Schleife um eins deaktiviert. Sie initialisieren l-1, dann die folgende Schleife ausführen, deren scheinbaren Zweck liest num Zahlen:

while (l<num){ 

Also, wenn zum Beispiel „1“ eingegeben wurde, um nur eine Zahl zu lesen, wobei der Körper der Schleife wird niemals ausgeführt, da der Vergleich "1 < 1" falsch ist.

Es ist wahrscheinlich, dass es andere Probleme mit diesem Code gibt, schwer zu analysieren, aufgrund schlechter Einrückung.

+0

'l' ist = 0; von Anfang an. und ich habe nicht ganz verstanden, was du über den scanf gesagt hast ("% d", k2 [f]); –

+0

Nein, 'l' ist nicht 0. Dieser Code sagt eindeutig "l = 1;" am Anfang. Haben Sie diesen Code tatsächlich selbst geschrieben oder von jemand anderem kopiert? –

+0

Oh well .. ich mache den Code in Tutorialpoint Online Compiler und ich hatte l = 0; Dort. Ich schrieb es selbst –

1

Diese Schleife

 for (i=0;i=19;i++){ 

wird nie enden, da i = 19 immer wahr bewerten wird.

Ich denke, dass die Absicht war:

for (i=0;i<19;i++){ 
+0

Das ist wahr, aber das war nicht der Grund für den Absturz. –

+0

@SamVarshavchik Wahr! Aber er spricht nicht von Abstürzen, sondern von generischen Problemen in seinem Programm. – sg7

0

Statt l, was Sie wahrscheinlich gedacht, Sie verwenden f, die, wie Sam Varshavchik bereits gesichtet, ist nicht initialisiert.

Außerdem übergeben Sie keinen Zeiger an scanf: scanf("%d", k2[f]);. Sie benötigen scanf("%d", k2 + l); stattdessen oder scanf("%d", &k2[l]), wenn Sie bevorzugen.