2014-03-13 118 views
0

我是C編程新手,我不知道我能在這段代碼中改變什麼,如果我編譯這段代碼,它只顯示n次的姓氏。爲什麼它不會顯示其他名稱,請幫助專家。謝謝!如何使用for循環打印輸入的字符串?

#include<stdio.h> 
#include<string.h> 
#include<malloc.h> 
int main() 
{ 
    int a; 
    char n[50]; 
    printf("enter the number of students:\n"); 
    scanf("%d",&a); 
    printf("enter the names of the students\n"); 
    int i; 
    for(i=0;i<a;i++) 
    { 
     scanf("%s",n); 
    } 

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

     printf("%s\n",n); 

    } 

return 0; 

} 
+2

移動打印到第一循環? –

回答

0

您可以將名稱存儲在指向char的指針數組中。

int a; 
printf("enter the number of students:\n"); 
scanf("%d",&a); 

char *n[a]; // VLA; A C99 feature 
// Allocate memory for all pointers. 
for(int i=0;i<a;i++) 
{ 
    n[i] = malloc(50); 
} 
printf("enter the names of the students\n"); 
for(int i=0;i<a;i++) 
{ 
    scanf("%s",n[i]); 
} 

,然後打印出來作爲

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

注:不要使用scanfgets讀取字符串。最好使用fgets函數。

fgets(n[i], 50, stdin); 
+0

@self:請參閱編輯。 – haccks

0

只打印最後一個,因爲每個人會覆蓋掉前一個n內容。你可以在閱讀後立即打印出來。

變化

for(i=0;i<a;i++) 
{ 
    scanf("%s",n); 
} 

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

    printf("%s\n",n); 

} 

for(i=0;i<a;i++) 
{ 
    scanf("%s",n); 
    printf("%s\n",n); 
} 
3

char n[50]是一個字符數組,可以存儲多達50大小 在這裏,你再次和覆蓋相同的字符串只是一個字符串再次與您的scanf

+0

阿瓊可以ü請編輯我的程序,請不要讓我知道兄弟 –

+1

@ R.A你將如何學習而不爲自己思考? – this

+0

阿瓊可以建議我一個網站的C? –

1

每當您讀取新名稱時,都會覆蓋最後一個名稱。爲了避免這種情況,您必須聲明一個數組來存儲它們。但是,由於您的學生人數是從用戶輸入中收到的,因此您必須動態分配它,例如,

#include<stdio.h> 
#include<string.h> 
#include<stdlib.h> 
int main() 
{ 
    int a; 
    int i; 
    char **n; 
    printf("enter the number of students:\n"); 
    scanf("%d",&a); 

    n = malloc(sizeof(char*) * a); 

    printf("enter the names of the students\n"); 

    for(i=0;i<a;i++) 
    { 
     n[i] = malloc(sizeof(char) * 50); 
     scanf("%s",n[i]); 
    } 

    for(i=0;i<a;i++) 
    {  
     printf("%s\n",n[i]); 
    } 

    for(i = 0;i < a;i++) { 
     free(n[i]); 
    } 

    free(n); 

    return 0; 
} 

請避免使用malloc.h。改爲使用stdlib.h

+0

'sizeof(char *)'???這有效嗎?
錯誤:無效轉換從'void *'到'char **'[-fpermissive] n = malloc(sizeof(char *)* a);' – KNU

+0

@KunalKrishna請參閱http://ideone.com/7DODt7 – Mauren

+1

k,我得到這個錯誤因爲我有C++作爲ideone上的語言。這應該是被接受的答案。 – KNU

0

替代,但效率較低回答Mauren的。 我張貼,以幫助您瞭解其他可能性。

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

#define MAXLEN 50 /*..max #character each name can have*/ 
#define MAXLINES 5000 /*..max #lines allowed*/ 

int main() 
{ 
int a; 
int i; 
char *n[MAXLINES]; //pointer to text lines 
printf("enter the number of students:\n"); 
scanf("%d",&a); 

printf("enter the names of the students\n"); 

for(i=0;i<a;i++){ 
    n[i] = malloc(sizeof(char) * MAXLEN); 
    //same as : *(n+i) = malloc(sizeof(char) * 50); 
    scanf("%s",n[i]); 
} 

for(i=0;i<a;i++){  
    printf("%s\n",n[i]); 
} 

for(i = 0;i < a;i++){ 
    free(n[i]); 
} 

free(n); 
system("pause"); 
return 0; 
} 

推薦閱讀:Pointer Arrays; Pointers to Pointers