2015-04-23 2 views
-2

Я хочу получать имена от пользователя. После этого я хочу напечатать на экране полученные имена. Например:строки scanf на указателе

--scan:

roy 
john 
malw 

--print:

roy 
john 
malw 

код:

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

int main() 
{ 
    int i; 
    char *aer[4]; 
    char *(*pter)[4] = &aer; 

    for(i=0;i<4;i++) 
     scanf(" %s",&(*pter)[i]); //read strings 

    for(i=0;i<4;i++) 
     printf("String %d : %s\n",i+1,(*pter)[i]); //write strings 

    system ("pause"); 
    return 0; 
} 
+0

В чем проблема и ваш вопрос? –

+0

Вышеупомянутый код не работает –

+0

'char names [4] [32];' ... 'scanf ("% 31s ", names [i]);' .... 'printf ("% s \ n " , имена [i]); ' – BLUEPIXY

ответ

0

scanf, вероятно, не является правильным функция, попробуйте strtok:

#include <string.h> 
#include <stdio.h> 

#define MAX_LINE_LENGTH 80 
#define MAX_TOKENS_PER_LINE 4 

int main() { 
    int i; 
    char *aer[MAX_TOKENS_PER_LINE]; 
    char s[MAX_LINE_LENGTH]; 

    do { 
     if (!fgets(s, MAX_LINE_LENGTH, stdin)) return -1; 

     i = 0; 
     while (
      i != MAX_TOKENS_PER_LINE 
     && (aer[i] = strtok(i ? 0 : s, " \n")) 
     ) i++; 

     i = 0; 
     while (
      i != sizeof(aer)/sizeof(aer[0]) 
     && aer[i] 
     ) { 
      fprintf(stdout, "%s\n", aer[i]); 
      i++; 
     } 
    } 
    while (aer[0]); 

    return 0; 
} 

Также обратите внимание, что вы забыли выделить память для токенов, подлежащих анализу. В моем примере память выделяется для всей строки, а strtok возвращает указатели на подстроки внутри нее.

+0

Спасибо, брат: –

0

На самом деле, это также возможно с зсапЕ:

#include <stdio.h> 

int main() { 
    char s[4][20+1]; 
    int i = 0, j = 0; 
    while (i != 4 && scanf("%20s", s[i])) { 
     i++; 
    } 
    while (j != i) { 
     printf("%s\n", s[j]); 
     j++; 
    } 
    return 0; 
} 

Но память по-прежнему должен быть выделен, а также отметить, что зсапЕ следует дать максимальную длину.