2016-10-06 2 views
3

Ich bitte den Benutzer, zwei Ganzzahlen einzugeben, n und x. Danach muss ich sie nach einem Wert für die a Variable n mal fragen. Ich muss für jeden Wert eine neue Variable erstellen. Wie mache ich es? Ich habe absolut keine Ahnung.Wie scanf() n mal wiederholen?

Auch muss ich es in einer Zeile tun, so wird der Eingang sein, beispielsweise 50 30 21, nicht

50 
30 
21 

Dank.

#include <stdio.h> 

int main (void) { 
    int a, n, x; 
    int i = 0; 

    scanf ("%d%d", &n, &x); 

    scanf ("%d", &a); /* what should I do here? */ 
} 
+1

Verwenden Sie ein Array und eine Schleife –

+0

Für einfache Szenarien ist ein Array und eine Schleife die Lösung. Für ein dynamischeres Szenario können Sie die Funktionen 'Calloc()', 'Malloc()' verwenden, um Memeroy dynamisch zuzuweisen. – vivek

+0

@vivek, in diesem Fall ist der dynamisch zugewiesene Speicher ebenfalls ein Array. –

Antwort

2

Try this:

int arr[100]; // static allocation but you can also allocate the dynamically memory 

printf("Enter the number for how many time repeat scanf()\n"); 
scanf("%d",&n); 

for (int i = 0; i < n; i++) 
{ 
    scanf("%d",&arr[i]); 
} 
2

den Code unten Versuchen:

#include <stdio.h> 

    int main (void) { 
    int a[100]; 
    int n, x; 
    int i = 0; 

    scanf ("%d%d", &n, &x);//n cannot be greater than 100 in this case. 

    for(i = 0; i < n; i++) 
    { 
     scanf ("%d", &a[i]); 
    } 
    return 0; 
} 
2

Mit dynamic memory:

#include <stdio.h> 
#include <stdlib.h> 

int main (void) { 
    int *a = NULL; 
    int n, x, i; 

    scanf("%d%d", &n, &x); 

    if (n <= 0) { 
    fprintf(stderr, "n must be > 0\n"); 
    return 1; 
    } 

    a = malloc(n * sizeof(int)); 
    if (a == NULL) { 
    fprintf(stderr, "failed to allocate memory for " 
     "%d integers\n", n); 
    return 1; 
    } 

    /* reading the user input */ 
    for (i = 0; i < n; i++) { 
    scanf ("%d", &a[i]); 
    } 

    /* usage */ 
    for (i = 0; i < n; i++) { 
    printf("a[%d] = %d\n", i, a[i]); 
    } 
    printf("x = %d\n", x); 

    free(a); 

    return 0; 
} 
+1

Für jemanden, der Probleme mit der Schleife hat, ist die Verwendung der dynamischen Speicherzuweisung wahrscheinlich komplexer, als sie bereit sind. –

0

Danach muss ich sie fragen, für ein V für die a-Variable n mal.

High Level Programmiersprachen und sogar Assembly Language (Conditional/Unconditional Jump) liefern Loop Konstrukte für einen Programmierer. In der Computerprogrammierung ist eine Schleife eine Folge von Anweisungen, die kontinuierlich wiederholt wird, bis eine bestimmte Bedingung erreicht ist. In C/C++ haben wir for, while, do while Schleifenkonstrukte.

Also, um einen Benutzer für einen Wert für n-mal zu fragen, können Sie for loop in Ihrem Programm verwenden. Ich habe ein Beispiel unten angegeben:

#include <stdio.h> 
#define MAX_ARR_LEN 100 
int main (void) 
{ 
    int a[MAX_ARR_LEN]; 
    int n, x; 
    int i = 0; 

    scanf ("%d%d", &n, &x); 

    if (n > MAX_ARR_LEN) { 
     printf("You can't enter more than - %d\n", MAX_ARR_LEN); 
     return -1; 
    } 

    for(i = 0; i < n; i++) { 
     scanf ("%d", &a[i]); 
    } 
    return 0; 
} 
0

Wenn Sie scanf tun, ist es die Eingabe, bis die Raumzeichen nimmt, die ein Trennzeichen ist. Sie müssen dazu nichts extra angeben. Wenn Sie den Wert n nicht erneut verwenden müssen, können Sie diesen Code verwenden.

#include <stdio.h> 
#include <stdlib.h> 

int main (void) { 
    int n, x, i; 
    scanf ("%d%d", &n, &x); 
    int *a = (int *) malloc (n * sizeof(int)); //This will allocate 'n' integer sized memory for 'a' 
    for(i = 0; i < n; i++) { 
     scanf ("%d", &a[i]); 
    } 
}