Другие языки программирования и технологии

Написала программу, а он выдает неверный результат, c++

Компилирует, но выдает неверные цифры. Хотела написать тест, где логическая ошибка??
#include
using namespace std;
int main () {
setlocale(LC_ALL, "Russian");
int f, t;
char x [10];
char y [7];
char z [15];
char a [15];
cout << "Вопрос 1: Кто покинул Коноху? \n";
cin >> x;
if (x=="Саске" || x=="Saske")
t=t+1;
else {
f=f+1;
}
cout << "Вопрос 2: Четвертый Хокаге Конохи? \n";
cin >> y;
if (y=="Минато" || y=="Minato")
t=t+1;
else {
f=f+1;
}
cout << "Вопрос 3: Внучка Хаширамы? \n";
cin >> z;
if (z=="Цунаде" || z=="Cunade")
t=t+1;
else {
f=f+1;
}
cout << "Вопрос 4: Мать Хамуры и Хогоромо? \n";
cin >> a;
if (a=="Кагуя" || a=="Kaguya")
t=t+1;
else {
f=f+1;
}
cout << "Количество правильных ответов=" << t << endl;
cout << "Количество неправильных ответов=" << f;
return 0;
}
x=="Саске" - Сравнение строк так не делается! Используйте класс string и тогда можно будет сравнивать слова так как вы сравниваете. Иначе нужно побуквенно сравнивать слово в цикле.
f и t не инициализированы как вам подсказала Анна Анохина

Далее не ошибки а уточнения:
t=t+1; вполне себе можно заменить на t++; как и f=f+1; на f++;
https://pastebin.com/RiV4PJiC Вот подправил немного. У меня в самом код блоксе приложение запускается с сбитой кодовой страницей (кракозябрами) но откомпилированное приложение норм работает
Терентьев Александр
Терентьев Александр
15 408
Лучший ответ
Boris Yegorov Еще можно ++t или t+=1... и тогда автор свихнется окончательно :))
Тут просто неправильно используются операции C++. C++ интерпретирует очень многие выражения, но часто совсем не так. как предполагает человек, с ним мало знакомый.

Программа пишется, например, так:

#include "iostream"
#include "string"
using namespace std;
int main(){
setlocale(LC_ALL, "Russian");
const int n=2; int f=0,t=0;
string z,x[n]={"Name1","Name2"},y[n][2]={"Maske","Saske", "Ginato","Minato"};
for(int i=0;i< n;i++){
cout << "Question "<< i+1<<": "<< x[i]<> z;
if(z==y[i][0] || z==y[i][1])t++; else f++;}
cout << "t=" << t << ", f=" << f<< endl; cin.get(); cin.get();}

Вопросы и ответы надо давать, естественно, в цикле, а не многократным повторением кода. Я тут для краткости написал два вопроса, легко увеличивается до скольких угодно.
Бессонов Николай Черт, движок "Ответов" сжевал часть кода. Корректрирую:

#include "iostream"
#include "string"
using namespace std;
int main(){
setlocale(LC_ALL, "Russian");
const int n=2; int f=0,t=0;
string z,x[n]={"Name1","Name2"},y[n][2]={"Maske","Saske", "Ginato","Minato"};
for(int i=0;i< n;i++){
cout << "Question "<< i+1<<": "<< x[i]<> z;
if(z==y[i][0] || z==y[i][1])t++; else f++;}
cout << "t=" << t << ", f=" << f<< endl; cin.get(); cin.get();}
Бессонов Николай Не вышло. Попробую еще раз

#include "iostream"
#include "string"
using namespace std;
int main(){
setlocale(LC_ALL, "Russian");
const int n=2; int f=0,t=0;
string z,x[n]={"Name1","Name2"},y[n][2]={"Maske","Saske", "Ginato","Minato"};
for(int i=0;i< n;i++){
cout << "Question "<< i+1<<": "<< x[i]<< endl; cin >> z;
if(z==y[i][0] || z==y[i][1])t++; else f++;}
cout <<"t=" << t <<", f=" << f<< endl; cin.get(); cin.get();}
1. Строки так сравнивать нельзя. Использовать функцию strcmp или что-то аналогичное. Вы сравниваете два указателя, они всегда не равны.
2. Инициализировать f, t перед использованием. Иначе вы прибавляете 1 к чему попало.
Boris Yegorov
Boris Yegorov
39 077
f и t не инициализированы
а что в кресты не завезли строки? Зачем вы чары используете?