2015-02-23 31 views
-1

當我運行這個程序並給出laks作爲輸入時,我得到了laks作爲輸出加上一個額外的字符。如果我想盡快打破程序行被輸入,即當我按下輸入時,我希望循環停止,但聲明似乎不工作。當我使用printf作爲字符數組時,我得到了一個額外的和不同的字符

# include <stdio.h> 
# include <conio.h> 
# include <ctype.h> 
void main() 
{ 
clrscr(); 

char person[5]; 
int i; 
printf("enter person name \n"); 
for(i=0;i<5;i++) 
{ 
scanf("%c",&person[i]); 
//while(person[i]!='/n') 

} 
printf("%s",person); 

getch(); 
} 
+1

請注意,它是「\ n''而不是''/ n''是換行符。由於這是評論,這不是你當前問題的一部分。 – 2015-02-23 07:03:21

+0

是否有原因,你沒有使用if(scanf(「%4s」,person)!= 1)return 1;'代替循環? – 2015-02-23 07:06:37

+0

是的,我注意到只有發佈後。 – venkat 2015-02-23 07:13:06

回答

2

你是不是空終止您的字符串

所以有

person[i] = '\0'; 

for循環。

我會

char person[6] = ""; 

後來又做了掃描

+0

是的這有效。 – venkat 2015-02-23 07:14:16

1

增加1數組的大小和nul終止它:

char person[6]; 
for(i=0;i<5;i++) 
{ 
    scanf("%c",&person[i]);  
} 
person[i] = '\0'; // or person[i] = 0; 

如果數組不nul終止的printf不會理解字符串的結尾。通過搜索(第一個)NUL字節可以找到C字符串的長度。

爲了讓事情變得更簡單,你可以簡單地做:

char person[6] = { 0 }; 
for(i=0;i<5;i++) 
{ 
    scanf("%c",&person[i]);  
} 

還要注意conio.h是非標準和標準規定main方法返回一個int

相關問題