2013-04-13 31 views
7

scanf ("% d% c", & kích thước, & chara); hoạt động nhưng riêng scanf cho đầu vào ký tự không hoạt động. Tôi hiển thị những mã này bên trong mã. Tại sao vậy?Tại sao quét 2 không hoạt động trong chương trình của tôi?

void squareCustomFill(int size, char chara); 

int main(void) { 

int size,i,k; 
char chara; 

printf("Enter size of square: "); //This works 
scanf("%d %c",&size,&chara); 

//printf("Enter fill character: ");  BUT WHY DOES NOT THIS WORK?? 
//scanf("%c",&chara); 

squareCustomFill(size,chara); 

return 0; 

} 

void squareCustomFill(int size, char chara){ 

int i,k; 

for (k=1;k<=size;k++){ 

    for(i=1;i<=size;i++) 
     printf("%c",chara); 
     printf("\n"); 

} 
} 

Trả lời

9

Quét không tiêu thụ ký tự \n nằm trong bộ đệm từ cuộc gọi scanf đầu tiên.

Vì vậy, cuộc gọi scanf thứ hai đã thực hiện.

Bạn phải xóa stdin trước khi đọc lại hoặc chỉ cần loại bỏ dòng mới.

Cuộc gọi thứ hai nên

scanf(" %c",&chara); 
    ^this space this will read whitespace charaters(what newline also is) until it finds a single char 
1

Có, tôi tin Armin là đúng. scanf sẽ đọc trong khoảng trắng (phím dài, dòng mới, v.v.). Khi bạn nhập các giá trị nếu bạn nhấp vào thanh dấu cách hoặc nhập ngay sau lần quét đầu tiên, lần quét thứ hai sẽ đọc trong giá trị đó (dấu cách, dòng mới, v.v.). Vì vậy, bạn đã khắc phục điều đó bằng scanf ("% d% c", kích thước &, & chara) vì có khoảng cách giữa% d và% c. Nếu bạn muốn chúng riêng biệt chỉ cần làm những gì Armin đề xuất: scanf ("% c", & chara).

0

Ném getchar() vào giữa chúng và vuốt lên dòng mới không liên quan đó.