2010-08-11 30 views
5

thể trùng lặp:
Help with C puzzleCó gì sai với chương trình C này

Mục đích của chương trình là để in dấu trừ 20 lần, nhưng nó không hoạt động.

#include <stdio.h> 
    int main() 
    { 
     int i; 
     int n = 20; 
     for(i = 0; i < n; i--) 
      printf("-"); 
     return 0; 
    } 
+1

Đầu ra/lỗi là gì? – James

+1

nó cho dấu trừ vô hạn ... – SurajRk

+4

Đây có phải là vấn đề về bài tập về nhà không? –

Trả lời

24
#include <stdio.h> 
    int main() 
    { 
     int i; 
     int n = 20; 
     for(i = 0; i < n; i++) 
      printf("-"); 
     return 0; 
    } 

Bạn có -- thay vì ++

+5

Yup, vòng lặp đó sẽ chạy mãi mãi vì 'i' bắt đầu tại' 0' và tiếp tục thu nhỏ hơn. Nó sẽ không bao giờ lớn hơn * n * để điều kiện thoát của vòng lặp sẽ không bao giờ đạt được. – FrustratedWithFormsDesigner

+4

Chắc chắn nó sẽ lớn hơn n khi số nguyên quấn quanh? Vòng lặp sẽ chạy lâu hơn một chút so với dự định là tất cả. – signine

10

Thay i-- với i ++.

4
int main() { 
    int i; 
    int n = 20; 
    for(i = 0; i < n; i++) 
    printf("-"); 
    return 0; 
} 

Bạn đã giảm dần thay vì gia tăng.

2

Bạn đã cố gắng thay đổi

i-- 

để

i++ 

Bạn có vòng lặp để in ra một "-" càng lâu càng "i" là ít hơn 20. Sau mỗi vòng lặp bạn giảm giá trị của i bằng 1, nó sẽ tiếp tục in trong một thời gian rất dài. Thay đổi phần cuối cùng của vòng lặp for thành "i ++" có nghĩa là nó sẽ thực hiện một vòng lặp mỗi vòng lặp và dừng lại khi quá trình lặp lại hai mươi kết thúc.

1

các i-- cần phải được i ++

bạn cũng có thể làm

int n = -20; 
    for(i = 0; i > n; i--) 

nhưng đó là xấu mã hóa thực hành

+4

Tại sao đề xuất câu trả lời là thực hành mã hóa không tốt? –

+2

vì trong các trường hợp khác, bạn muốn giảm bộ đếm của mình. trong trường hợp này giảm bộ đếm không có ý nghĩa. – Forge

+2

@Jamie Sáng tạo;) Người ta có thể học hỏi ngay cả từ một điều gì đó không nên được thực hiện một cách cụ thể. –

-1

Bạn sẽ in không có dấu gạch ngang. Bạn có thể đi với giải pháp Jaime Wong hay làm điều này:

for (i = n; i >= 0; i--)

+0

Bạn sẽ in SO MANY dấu gạch ngang. Ngoài ra, đó là một cách khủng khiếp để làm điều đó. Rất nhiều không phải là tiêu chuẩn, và là vô nghĩa hơi mơ hồ. –

+4

Điều đó sẽ không in không có dấu gạch ngang, như mọi người khác đã giải thích. Ngoài ra, bạn viết sai tên tôi. –

+0

Rất tiếc, bạn đã đúng. Xin lỗi về điều đó, trên cả hai tính. –

2

Thay đổi i-- để i ++. i-- giảm giá trị khi bắt đầu bằng 0 và với các lần giảm tiếp theo sẽ không bao giờ đạt đến 20 (hoặc +20).

26

Đây là một câu đố cổ điển!

Con đường tôi nhìn thấy nó là

"Bạn chỉ có thể thay đổi/chèn/xóa một ký tự trong mã để làm cho - in gấp 20 lần".

Một số câu trả lời là (nếu tôi nhớ chúng một cách chính xác)

1)

#include <stdio.h> 
    int main() 
    { 
     int i; 
     int n = 20; 
     for(i = 0; -i < n; i--) 
      printf("-"); 
     return 0; 
    } 

Ở đây bạn thay đổi i < n để -i < n

2)

#include <stdio.h> 
    int main() 
    { 
     int i; 
     int n = 20; 
     for(i = 0; i < n; n--) 
      printf("-"); 
     return 0; 
    } 

Ở đây bạn thay đổi số i-- đến n--

3)

#include <stdio.h> 
    int main() 
    { 
     int i; 
     int n = 20; 
     for(i = 0; i + n; i--) 
      printf("-"); 
     return 0; 
    } 

Bạn thay đổi i < n-i+n.

Để thử thách, hãy thử thay đổi/chèn/xóa một ký tự để in nó thành - lần. (Không đọc nhận xét cho câu trả lời này nếu bạn muốn dùng thử!)

+3

+1 để thực hiện câu đố này. Cũng nghĩ rằng câu trả lời. –

+1

Thử thách thật thú vị;) Rất vui vì tôi không xem xét các bình luận trước khi cố gắng trả lời nó. –

1

Chính xác thì bạn đang cố gắng làm gì với vấn đề này ??? Ở đây bạn đang cố gắng giảm giá trị của biến .. một biến có giá trị sẽ không bao giờ đạt đến điều kiện (i < 20) bạn đã cung cấp ... do đó nó sẽ tiếp tục in '-' cho đến khi những gì jamie wong quy định, tức là i= -2^31. Nó sẽ trở thành + ve. Tôi vừa thử chương trình này.

#include <stdio.h> 
int main() 
{ 
    int i; 
    int n = 20; 
    for(i = 0; i < n; i--) 
     printf("-"); 
    return 0; 
} 

Theo câu hỏi mà bạn hỏi, i nên được tăng lên, ví dụ: i++ thay vì i--.

@jamie wong: thanx man..learnt một điều mới về tht một wraparound ....

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