Saya baru mengenal pemrograman dan saya ingin mendapatkan input angka yang tidak terbatas dari pengguna, dan saya perlu membandingkan setiap angka dengan 4 atau 7; jika jumlahnya 4 atau 7, saya akan meningkatkan penghitung.

Masalahnya adalah kondisi if if(arr[i]!='4' || arr[i]!='7') dijalankan meskipun angkanya 4 atau 7.

Saya mencoba menerapkan yang lain jika dengan membandingkan kode ASCII >>> if(arr[i]!=0x34 || arr[i]!=0x37) tetapi solusi ini juga tidak berhasil.

Bisakah Anda membantu saya menemukan masalahnya?

#include <iostream>
#include <string>
#include <string.h>

using namespace std;

int main()
{
    int counter=0;
    char arr[]={};                 
    cin >> arr;

    for (int i=0 ; i<strlen(arr)-1 ; i++)
    {
          if(arr[i]!='4' || arr[i]!='7')
          {
             cout << "NO" << endl;
             counter=0;                 
             break;
          }else
            counter++;
    }
    cout << counter << endl;
    if(counter==4 || counter==7)
    cout << "YES" << endl;

}
c++
0
logan_92 29 Maret 2020, 20:52

1 menjawab

Jawaban Terbaik

Program Anda memiliki perilaku tidak terdefinisi, karena ini

char arr[]={};                 

Membuat array dengan panjang nol. Ini bahkan tidak diperbolehkan dalam standar C++. Jika kompiler Anda tidak mengeluhkannya, itu karena ia menggunakan ekstensi bahasa non-standar.

Bagaimanapun, array memiliki panjang nol. Anda kemudian mencoba menulisnya dengan

 cin >> arr;

Yang menyebabkan larik diakses di luar batas, tidak peduli berapa lama input yang diberikan. Ini akan menyebabkan perilaku tidak terdefinisi dan Anda tidak akan memiliki jaminan apa pun tentang bagaimana program akan berperilaku.

Jangan pernah menggunakan array char untuk menyimpan string, terutama input pengguna. Gunakan std::string sebagai gantinya:

 std::string arr;
 cin >> arr;

Maka alih-alih strlen(arr) Anda harus menggunakan arr.size().


Saya cukup yakin Anda memiliki kesalahan logika lebih lanjut dalam program Anda (lihat komentar pertanyaan). Tetapi sebelum Anda memperbaiki logika program, Anda harus memastikan bahwa Anda menulis program yang valid terlebih dahulu.

2
walnut 29 Maret 2020, 18:00