Vennligst kan jeg få et hint om hvor du skal fokusere på formatering?

stemmer
0

Programmet er ment å beregne antall argumenter, iterere over argumentlisten, for hvert argument omdanne argumentet til et heltall og kopiere det til en matrise, iterere over elementene i matrisen, å legge verdien av hver av dem til en variabel (beregner summen av elementer), og skrive summen. Det vil ikke være mer enn 15 argumenter. Så langt jeg har:

int sumofA (int sizeofA, int x, int y){  
  int i = sizeofA;  
   if (i <= 15){  
      int z = x + y;  
      return z;  
   }  
}  

int main (int argc, char*argv[]){    
   int sizeofA = argc - 1;  
   int i = 1;  
   while (i <= sizeofA){  
      int x = GetInt (argc, argv, i);  
      i = i + 1;  
      int y = GetInt (argc, argv, i);     
      printf (%d\n, sumofA (sizeofA, x, y));
   }  
   return 0;  
}  

Ok, nå (når gitt tre andre enn ./a argumenter) det skrives summen av det første argumentet, og den andre argumentet ... deretter den andre og den tredje ... og deretter verdien av det tredje argumentet. Hvorfor?

Her er koden for GetInt (jeg må bruke dette):

int GetInt (int argc, char * argv[], int i) {  
   if (i < 0 || i >= argc) return 0;  
   return atoi(argv[i]);  
}  

Må jeg gå gjennom og gi hver argument til et heltall (f.eks. int z = GetInt (argc, argv, i + 2))?

Publisert på 30/03/2009 klokken 20:54
kilden bruker
På andre språk...                            


5 svar

stemmer
2

Ditt problem er her:

 int x = GetInt (argc, argv, 1);
 int y = GetInt (argc, argv, i);

Når du går gjennom løkken første gang, hva er jeg, og hva betyr det å skrive ut? Hva om den andre gangen du går gjennom løkken?

Svarte 30/03/2009 kl. 20:59
kilden bruker

stemmer
2

For det første, er du tilbake 0 etter første iterasjon av løkken.

Svarte 30/03/2009 kl. 21:00
kilden bruker

stemmer
5

Det er et par av dette går galt her:

  • i er ikke definert i sumofA, så sammenligne med det utbytte udefinert oppførsel.
  • Hvis jeg> = 15, så det er uklart hva sumofA kommer tilbake.
  • Du kommer tilbake inne i løkken; sikkert det er ikke hva du ønsker.
  • Koden er faktisk ikke lagre noe i matrisen A.

Vennligst kompilere kode med alle varsel-flagg på (gcc: -Wall -Werror -pedantic), og sørge for at det er noen advarsler når koden kompilerer.

Legg merke til at den variable størrelse er unødvendige: bruk mens (i <argc) .

Edit: Nå som du har lagt koden GetInt , erstatte

GetInt (argc, argv, i);

med

atoi(argv[i]);

Det er ikke bruk for GetInt , slik at du kan fjerne den helt.

Til slutt: i spørsmålet ditt nevner du lagrer tallene i en matrise og deretter summere dem. Har du ønsker å gjøre det, eller trenger å gjøre det (på grunn av noen oppdrag?) Fordi det ikke er nødvendig: bare legge resultatet av alle samtaler til atoi . Matrisen A er da overflødig.

Edit 2: Jeg ser du har løst koden på enkelte steder. Koden for tiden (23:31 CEST) legger til det første argumentet til hver av de argumentene hver for seg og skriver dem. Du er ikke helt der ennå. Lykke til!

Svarte 30/03/2009 kl. 21:03
kilden bruker

stemmer
0

Den første gang gjennom sløyfen x og y begge er overdratt til samme verdi (fordi i = 1), blir deres sum skrives ut, og deretter funksjonen returnerer som avsluttes programmet. Så du vil bare være å få den første verdien lagt til seg selv.

Svarte 30/03/2009 kl. 21:05
kilden bruker

stemmer
1

Siden du ønsker formatering hjelp ...

First off, har C flere oppdrag operatører enn bare =, og disse er stor for ting som x = x + 1. De fleste språk, C inkludert, gir en +=operatør, som ser slik ut: x += 1. Som gjør det samme som x = x + 1, og er hyggeligere. Syntaxtic sukker, men sukker er velsmakende.

Mens vi er i gang, C og mange andre språk gir en spesiell sak for += 1- den ++operatøren som C ++ har fått navnet sitt. Så egentlig x = x + 1kan skrives som x++med nøyaktig samme effekt . Vær imidlertid oppmerksom på at det er en stor forskjell mellom x++og ++x, men det spiller ingen rolle nå. For nå bruke hvilken du vil ha, og sørg for å sette det på en egen linje helt av seg selv før du lære forskjellen mellom x++og ++x.

Hvis du synes du har en variabel du bruker en gang, ikke bruk den. Istedenfor dette:

int sizeofA = argc - 1;
...
while (i <= sizeofA){
  ...
  printf ("%d\n", sumofA (sizeofA, x, y));
}

Prøv dette:

...
while (i <= argc - 1){
  ...
  printf ("%d\n", sumofA (argc - 1, x, y));
}

Eller (sannsynligvis bedre):

...
while (i < argc){
  ...
  printf ("%d\n", sumofA (argc - 1, x, y));
}

Tredje av, du bør ikke blindt passerer det hele argumenter listen, bare argumentet du ønsker å konvertere på dette nåværende tidspunkt, men det er en annen sak, og jeg antar at du ikke kan endre GetInt(). Dette virker som en kamp for en annen dag.

(Fjerde off, hvorfor er dette en fellesskaps Wiki spørsmålet?)

For det femte, tror jeg din logikk er av - hvis du begynner på en, tror jeg ikke du vil stoppe en før slutten av listen. Men dette er en enkel off-for-en feil, og du kan fikse det senere når du vet sikkert at det er faktisk feil.

Til slutt, foreslår jeg at du definerer en variabel, int answerog i stedet for printf()ing alle elementene i listen, bare gå gjennom listen, legg den numeriske verdien av hver enkelt til answer, en gang på slutten, skrive ut answer. Men kanskje jeg mangler poenget med oppdraget. Alternativt, hver gang du iterere gjennom løkken, skrive ut answer, slik at du kan se verdien vokse riktig hver gang. Jeg tror dette er nærmere hva du faktisk ønsker å gjøre i oppdraget, men jeg kan ikke ta deg tid til å sjekke fordi jeg har en klasse å gå til.

Svarte 30/03/2009 kl. 22:59
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more