2016-07-08 7 views
4

Ich bin ein Anfänger zu C (Lernen von freien Ressourcen), ich versuche, einen einfachen Code zu schreiben, um eine Reihe von Zahlen von einem Benutzer eingegeben in eine Reihe von Arrays .... Was mache ich falsch?Wie schreibe ich einen Code, mit dem ein Benutzer verschiedene Werte in Arrays eingeben kann

int numbers; 
    int number=1; 
    int counter = 0; 
    int pot[100]; 
    int calculate; 
    int result; 

printf("how many numbers do you want to calculate?:"); //asking user how many different integers would be calculated 

scanf("%d",&numbers); 

while (counter < numbers) 

{ 
    printf("input number %d\n", number);//asking user to input figures to be calculated 
    scanf("%d",&pot[0]+1); //user would input values into spaces in the array 

    counter++; 
    number++; 

} 


printf("Please press 1 for addition and 2 for multiplication"); 
scanf("%d",&calculate); 

switch (calculate) 

{ 
case 1: result = pot[0]+ pot[0]+1;//this is supposed to add all the individual values within the arrays 

printf("the result is %d", result); 
break; 

case 2: result = pot[0]* pot[0]+1;//this is supposed to multiply all the individual values within the arrays 
break; 
} 



    return 0; 
+3

Was ist die Eingabe, die erwartete Ausgabe und die tatsächliche Ausgabe? – dbush

+1

Was ist '& pot [0] + 1'? – stackptr

+0

Entschuldigung, ich verstehe die Frage nicht (Anfängerprobleme)! –

Antwort

2
int numbers; 
int number=1; 
// int counter = 0; instead used `i` 
int pot[100]; 
int calculate; 
int result; 
int i = 0; 

printf("how many numbers do you want to calculate?:"); //asking user how many different integers would be calculated 

scanf("%d",&numbers); 

printf("input %d numbers \n", numbers);//asking user to input figures to be calculated 

for(i = 0; i < numbers; i++) 
{ 
    printf("input number %d \n", number); 
    scanf("%d", &pot[i]); //user would input values into spaces in the array 
    number++; 
} 

//scanf("%d",&pot[0]+1);  /* this line is wrong*/ 
//counter++; 
//number++;  


printf("Please press 1 for addition and 2 for multiplication"); 
scanf("%d",&calculate); 

switch (calculate) 

{ 
case 1: result = 0;//this is supposed to add all the individual values within the arrays 
     for(i = 0;i < numbers; i++) 
     { 
      result = result + pot[i]; 
     } 

     printf("the result is %d", result); 
     break; 

case 2: result = 1;//this is supposed to multiply all the individual values within the arrays 
     for(i = 0;i < numbers; i++) 
     { 
      result = result * pot[i]; 
     } 
     printf("the result is %d", result); 
     break; 
} 



return 0; 

Dieser Code sollte richtig für Ihr Programm arbeiten.

+0

Danke! Ich sehe meinen Fehler jetzt. –

+1

"Zahlen" in der Schleife nicht erhöhen! –

+1

@ Jean-BaptisteYunès Zahlen und Zahlen sind beide verschiedene Variablen. Und ich denke, das Initialisieren des Ergebnisses wird nicht gut tun, da 1 Operation Addition und eine andere Multiplikation ist. Also müssen wir den Wert des Ergebnisses entsprechend ändern. – VatsalSura

1

Ich bin nicht genau sicher, was Sie versuchen zu tun, so ist dies meine Vermutung:

int sum(const int *arr, size_t n) 
{ 
    int ret; 

    for (ret = 0; --n >= 0; ret += arr[n]) 
     ; 

    return ret; 
} 
long mpy(const int *arr, size_t n) 
{ 
    long ret; 

    for (ret = 1; --n >= 0; ret *= arr[n]) 
     ; 

    return ret; 

} 
// remove trailing newline 
void remTrailingNl(char *buf) 
{ 
    if (buf[strlen(buf) - 1] == '\n') 
     buf[strlen(buf) - 1] = '\0'; 
} 

int main() 
{ 
    int *arr, choice, tmp; 
    char line[80], *endp; 
    size_t n; 

    printf("How many numbers are in the array?"); 
    fgets(line, 80, stdin); 
    remTrailingNl(line); 
    n = strtol(line, &endp, 10); 
    // **endp will be the null character if conversion was successful 
    if (**endp == '\0') 
     if ((arr = malloc(n * sizeof(int))) == NULL) { 
      perror("malloc"); 
      return 1; 
     } 

    printf("Begin entering your numbers, each number to a line\n"); 

    // walking backwards, populate the array 
    while (n-- >= 0) { 
     fgets(line, 80, stdin); 
     remTrailingNl(line); 
     tmp = strtol(line, &endp, 10); 
     if (**endp == '\0') 
      arr[n] = tmp; 
     else { 
      fprintf(stderr, "Invalid number at position %d\n", n + 1); 
      return 1; 
     } 
    } 

    printf("Enter 1 for addition, and 2 for multiplication\n"); 
    fgets(line, 80, stdin); 
    remTrailingNl(line); 
    choice = strtol(line, &endp, 10); 
    if (**endp == '\0' && choice == 1 || choice == 2) { 
     switch (choice) { 
      case 1: // add 
       printf("Sum is %d\n", sum(arr, n)); 
       break; 
      case 2: 
       printf("Product is %ld\n", mpy(arr, n)); 
       break; 
     } 
    } else { 
     fprintf(stderr, "Invalid choice\n"); 
     return 1; 
    } 
    // heap memory must be freed 
    free(arr); 
    // return 0 on success 
    return 0; 
} 

Wir verwenden long für mpy, da die Multiplikation sehr große Antworten geben kann. Verwenden Sie auch nicht scanf, weil es sehr schwierig ist, richtig zu kommen, obwohl es sehr unschuldig aussieht. strtol ist besser, weil es mehr Details darüber gibt, warum die Nummer ungültig war. Lesen Sie die Manpages here. Wir rufen remTrailingNl direkt nach fgets wird aufgerufen, weil fgets immer einen abschließenden Zeilenumbruch in den Puffer setzt.

1

Wenn Sie einen einfachen Code nur zum Hinzufügen von Zahlen im Array benötigen, wo die Nummern vom Benutzer angegeben werden, können Sie einfach mit diesem folgen.

int i, num, ans=0, pot[100]; 
printf("Give the number of elements:"); 
scanf("%d",&num); 
printf("Enter numbers"); 
for(i=0;i<num;i++) { 
    scanf("%d",&pot[i]); 
    ans = ans + pot[i]; 
} 
printf("Sum is %d", ans); 
} 

diese Weise der Zusatz direkt anstelle es zuerst des Scannens und wieder gezeigt wird, die in der Schleife zu setzen und sie wieder hinzuzufügen, einen nach dem anderen.

(Und ich bin auch ein C-Lerner, korrigieren Sie mich, wenn ich irgendwo falsch bin.) Hoffe das vereinfacht es.

0
So, finally got a working program!! 

int pot[100]; 
int numbers; 
int count; 
int number = 1; 
int calculate; 
int result; 


printf("how many numbers do you want to calculate:"); 
scanf("%d", &numbers); 

for(count=0;count<numbers;count++) 

{ 
printf("enter number %d:\n", number); 
scanf("%d",&pot[count]); 
number++; 

} 

printf("Please press 1 for addition and 2 for multiplication"); 
scanf("%d",&calculate); 

switch (calculate) 

{ 
case 1: result = 0; 

     for(count = 0;count < numbers; count++) 
     { 
      result = result + pot[count]; 
     } 

     printf("the result is %d", result); 
     break; 

case 2: result = 1; 

     for(count = 0;count< numbers; count++) 
     { 
      result = result * pot[count]; 
     } 
     printf("the result is %d", result); 
     break; 
} 

zurück 0;

Verwandte Themen