Chương trình C: làm sao để hết lặp in ra nhiều câu trong for(...;...;....)

Hãy viết một chương trình nhận vào một số nguyên n và n số nguyên sau đó. Nếu n số nguyên đó có số 42 thì in ra màn hình dòng chữ “I’ve found the meaning of life!”, ngược lại in ra dòng chữ “It’s a joke!”.
em viết chương trình:

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


int main()
{
    int i;
    int a[10],t;
    scanf("%d",&t);
    for(i=1;i<=t;i++)
      {
        scanf("%d",&a[i]);


         if(a[i]==42)

         {


         printf("I've found the meaning of life!");


         }else{
         printf("It's a joke!");
         }
      }
    return 0;
}

//em không biết xóa làm sao để chương trình nó chỉ in ra 1 câu.Em thử viết if…else ngoài for thì khi đó em ktra thử a[i] nó bằng số 490423(số bất kì).Em thử dùng break vs continue thì nó in ra toan là It’s a joke! bất kì số nào kể cả số 42.
Em mới học lập trình nên ko biết nhiều ạ.Anh chị có thể gợi ý cho em cách để chương trình chạy đúng dc không:)))
Em cảm ơn nhiều ạ

Do để if trong for nên nó sẽ in ra mỗi khi bạn nhập.

Phân tích chút nè:

  • Theo như yêu cầu là in ra “I’ve found the meaning of life!” nếu như tìm thấy số 42 trong dãy đã nhập.

  • Vậy chỉ cần duyệt qua dãy một lần.

  • Kiểm tra xem số hiện tại có bằng 42 hay không:

    • Nếu bằng thì in ra “I’ve found the meaning of life!” rồi thoát khỏi for (dùng break)
    • Nếu không bằng thì không cần làm gì và chuyển sang số tiếp theo. (có thể thêm continue nếu thích)
  • Sau khi duyệt xong thì biến i sẽ có 2 trường hợp:

    • i = t + 1: nghĩa là đã duyệt hết mảng mà không thấy số 42.
    • i <= t: do đã break khi tìm thấy số 42 trong dãy.
  • Có thể dùng if (i == t + 1) để kiểm tra xem có nên in ra chuỗi “It’s a joke!” không. :slight_smile:

4 Likes

cảm ơn anh nhưng nó bắt nhập vào n số phía sau nên nếu dùng lệnh break thì nó không nhập được các số phía sau nữa
Ví dụ

Đầu vào Đầu ra
5 1 192 32 42 39 I’ve found the meaning of life!

Còn đoạn if (i == t + 1) thì nó phải là if (i == t ) vì vòng lặp chỉ chạy đến t (t +1 thì đã ngoài vòng lặp)

Chấm tự động thì bạn đọc tới 42 rồi out cũng được :smiley:

4 Likes

Theo mình hiểu thì bạn cần nhập hết n số vào rồi mới xuất ra I’ve… phải không. Nếu vậy thì đơn giản nhất là bạn tạo 1 biến kiểu bool a gán = false rồi trong vòng lập nhập số thì bạn chỉ kiểm tra nếu nhập số = 42 thì cho a = true(lưu ý không kiểm tra != 42 thì gán lại false). Hết vòng lập thì chỉ cần kiểm tra biến a rồi in thông báo.

4 Likes
#include <stdio.h>
#include<math.h>
#include<string.h>
int main()
{
    int i;
    int a[10],t,c=1;
    scanf("%d",&t);
    for(i=1;i<=t;i++)
      {
         scanf("%d",&a[i]);


         if(a[i]==42)

         {


         c=c+1;


         }

         if(i == t ){
            if(c==2){
                printf("I've found the meaning of life!");
            }else{
                printf("It's a joke!");
            }
         }






      }
    return 0;
}

em cho nếu có 42 thì số c sẽ thay đổi rồi làm.Còn kiểu bool là gì vậy ạ? em ms học C có 2 tuần thôi…

A post was merged into an existing topic: Topic lưu trữ các post off-topic - version 3

Không dùng bool thì dùng int cũng được. Tên là tim_thay chẳng hạn.

  • Gán biến ban đầu bằng 0 (chưa tìm thấy 42).
  • Trong quá trình tìm, nếu có 42 thì gán bằng 1 (đã tìm thấy 42). Chỉ if không cần else.
  • Cho chạy đến cuối và kết thúc vòng lặp.
  • Thoát ra khỏi vòng lặp và kiểm tra (if - else) biến đó và in ra.

Mã của bạn có vài dòng mà cách nhau xa thế? Thế này mà nhiều dòng thì cuộn xuống mỏi tay.

3 Likes

Em mới học lập trình nên phong cách lập trình còn kém:

  • tên biến chưa có nghĩa
  • cách ,ngoặc lung tung
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?