Перевод с++ в с, или чем заменить getline и string - C (СИ)
Формулировка задачи:
Нужно перевести этот кусок кода В частности интересует как заменить getline и string.
#include <iostream>
#include <string>
#include <windows.h>
using namespace std;
bool password_is_valid(string password)
{
string valid_pass = "qwerty123";
if (valid_pass == password)
return true;
else
return false;
}
void get_pass()
{
static int tryCnt = 0;
if (++tryCnt > 3)
{
cout << "\n > Доступ запрещён!\n" << endl;
return;
}
string user_pass;
cout << "Введите пароль: ";
getline(cin, user_pass);
if (!password_is_valid(user_pass)) {
cout << "Неверный пароль!" << endl;
get_pass();
}
else {
cout << "\n > Доступ разрешен!\n" << endl;
tryCnt = 0;
system("cls");
}
}
int main()
{
setlocale(0, "rus");
cout << "У вас есть 3 попытки! Помните об этом." << endl;
get_pass();
cout << "Continue..." << endl;
system("pause");
return 0;
}Решение задачи: «Перевод с++ в с, или чем заменить getline и string»
textual
Листинг программы
char user_pass[20];
Объяснение кода листинга программы
- Объявлена переменная
user_passтипа char, которая является массивом на 20 элементов. - Размер массива в байтах равен 20. В зависимости от реализации, размер массива в символах может быть меньше (например, если используется мультибайтная кодировка).
- В данной реализации, скорее всего, будет использоваться однобайтовая кодировка, поэтому размер массива в символах и в байтах совпадает.
- При использовании строки в C++ вместо
user_passнужно было бы указатьuser_pass[], чтобы указать, что это массив. - В C++ вместо
user_passможно было бы использовать std::string, чтобы работать с строками более удобным способом. - Если в C++ использовать std::getline для чтения строки, то его можно было бы заменить на fgets в C.
- Вместо
user_passможно было бы использовать любую другую переменную, например,password. - Если в C++ использовать std::string для хранения строки, то его можно было бы заменить на char* в C.
- Если в C++ использовать std::stringstream для обработки строки, то его можно было бы заменить на sscanf в C.
- Если в C++ использовать std::cout для вывода строки, то его можно было бы заменить на printf в C.
- Если в C++ использовать std::cin для ввода строки, то его можно было бы заменить на scanf в C.
- Если в C++ использовать std::string для хранения строки, то его можно было бы заменить на char* в C, указав
user_passкак массив символов. - Если в C++ использовать std::stringstream для обработки строки, то его можно было бы заменить на sscanf в C, указав
user_passкак массив символов. - Если в C++ использовать std::cout для вывода строки, то его можно было бы заменить на printf в C, указав
user_passкак массив символов. - Если в C++ использовать std::cin для ввода строки, то его можно было бы заменить на scanf в C, указав
user_passкак массив символов. - В данном коде не происходит ничего, кроме объявления переменной
user_pass. - Нет никаких операций с этой переменной, поэтому она остается неинициализированной.
- Нет никаких условий или циклов, которые могли бы изменить значение этой переменной.
- Нет никаких функций или операций, которые могли бы использовать эту переменную.
- Нет никаких других переменных или структур данных, которые могли бы быть связаны с этой переменной.