это мой первый вопрос на этом сайте, поэтому, извините, если я что-то не так.Сравнение индекса в массиве const char с char
Моя проблема в том, что у меня есть программа, которая должна читаться в текстовом документе, полном букв, поместить каждую букву в массив символов, а затем найти количество каждой буквы в массиве.
//i read in all the letters into the character array from my file and
//display them to the screen to show that it works (and it does)
//here is the for loop to go through the array
// i am trying to check if the contents of the current index are C,S, or R.
//by comparing them to characters.
ifstream inputFile;
string path;
int cloud,rain,sun = 0;
char C = 'C';
char R = 'R';
char S = 'S';
char array [3][30];
cout << "The purpose of this program is to read in a text file and calculate a the number of days that were rainy." << endl;
do{
cout << "Please enter the full path to the included \" Summer.txt\" file included witht this program." << endl;
cin >> path;
inputFile.open(path);
if(!inputFile){
cout << "ERROR!!! No file was found at this location or there was a problem reading the file!" << endl;
}
}while(!inputFile);
if(inputFile){
cout << "Success! The file was found and read!" << endl;
for(int r =0; r<3; r++){ //this is the loop to read in the text file
for (int c = 0; c < 30; c++){
inputFile >> array[r][c];
}
}
for(int r =0; r<3; r++){ //this outputs the array to the screen
for (int c = 0; c < 30; c++){
cout << array[r][c] << " ";
}
cout << endl;
}
for(int r =0; r<3; r++){ //this is the loop to add up all the sun, cloud, and rain values.
for (int c = 0; c < 30; c++){
if(array[r][c] == C){
cloud++;
}
else if(array[r][c] == S){
sun++;
}
else if(array[r][c] == R){
rain++;
}
}
}
cout << "Sun = " << sun << " rain = " << rain << " cloud = " << cloud << "." << endl;
}
}
Единственная проблема заключается в том, что, когда я выводить значения солнечного дождя и облака, я получаю случайное значение облака.
Есть ли способ сравнить содержимое индекса массива символов с буквой, чтобы получить логическое значение?
Правильный инструмент для решения таких проблем - ваш отладчик. Перед тем, как просить о переполнении стека, вы должны пропустить свой код по очереди *. Для получения дополнительной информации, пожалуйста, прочтите [Как отлаживать небольшие программы (Эрик Липперт)] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). Как минимум, вы должны \ [изменить] ваш вопрос, чтобы включить пример [Минимальный, полный и проверенный] (http://stackoverflow.com/help/mcve), который воспроизводит вашу проблему, а также замечания, сделанные вами в отладчик. –
rxu имеет переменную C = 'C', так что это действительно так. Хотя облако и дождь не инициализируются, что может объяснить случайное неопределенное поведение, отладчик может помочь. –
Сложно написать инструкцию if для каждой буквы. лучше использовать цикл для этого. Как и для набора массива 'char * letter = 'abcdefg ... ABCDEFG'' Затем для каждой буквы в документе проведите цикл по массиву букв, чтобы проверить, соответствует ли каждая буква в массиве букв буквой из документа. – rxu