2016-03-03 14 views
8

Nếu tôi nhập số 5, vòng lặp này phải chạy 5 lần nhưng nó đang chạy 6 lần. Vấn đề là gì?Vòng lặp đang chạy nhiều hơn chỉ định trong C? Tại sao?

int main(){ 
     int i, *arr, size; 
     printf("Please enter the Number: "); 
     scanf("%d ",&size); 
     arr = (int*) malloc(size * sizeof(int)); 
     for(i = 0; i < size; i++){ 
      scanf("%d ", &arr[i]); 
     } 
} 
+0

Bạn đã kiểm tra giá trị của kích thước trước vòng lặp chưa? – matt

+0

Có tôi đã kiểm tra @ matt –

+2

thử xóa không gian sau% d trong vòng lặp scanf. –

Trả lời

23

Xóa dấu cách khỏi chuỗi định dạng scanf() đang được sử dụng trong vòng lặp.

Nó làm cho tệp scanf() loại bỏ tất cả khoảng trắng sau khi đọc int (%d), cho đến khi tìm thấy nội dung nào đó không phải khoảng trắng. Trong lần lặp thứ năm của vòng lặp, scanf() đọc số int và tiếp tục cho đến khi tìm thấy khoảng trắng. Điều này cho phép ảo tưởng về việc cần đọc thêm một số nguyên nữa.

Trong lần gọi cuối cùng của scanf(), bất kỳ ký tự không khoảng trắng nào sau dữ liệu số nguyên sẽ khiến kết thúc đọc.

7

Tháo không gian ở đây:

này:

scanf("%d ",&arr[i]); 
     ^

nên là:

scanf("%d",&arr[i]); 
+1

Có, nó đang hoạt động. Nhưng vấn đề là gì? –

+1

Nó liên quan đến ['scanf'] (http://www.cplusplus.com/reference/cstdio/scanf/) khá phức tạp. Đừng bận tâm cho thời điểm này. –

+1

Bạn có thể vui lòng cho tôi nguồn để tôi có thể đọc và đọc không? Tôi tò mò muốn biết về nó @ Michael Walz –

0

tôi cũng phải đối mặt với vấn đề tương tự. Để hoàn hảo, vui lòng xóa không gian sau % d trong vòng lặp. Nó sẽ hoạt động. Có thể là một số tài sản của scanf.

int main(){ 
     int i, *arr, size; 
     printf("Please enter the Number: "); 
     scanf("%d",&size);// Note the change here 
     arr= (int*) malloc(size * sizeof(int)); 
     for(i= 0;i < size;i++){ 
      scanf("%d",&arr[i]); 
     } 
    } 
+1

Nhưng vấn đề là gì? bạn có thể giải thích dùm không. –

+0

@ Guy Guy Một số người đã chỉnh sửa mã.Now là đúng. –

Các vấn đề liên quan