Перевод с++ в с, или чем заменить getline и string - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Нужно перевести этот кусок кода
#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.

Решение задачи: «Перевод с++ в с, или чем заменить getline и string»

textual
Листинг программы
char user_pass[20];

Объяснение кода листинга программы

  1. Объявлена переменная user_pass типа char, которая является массивом на 20 элементов.
  2. Размер массива в байтах равен 20. В зависимости от реализации, размер массива в символах может быть меньше (например, если используется мультибайтная кодировка).
  3. В данной реализации, скорее всего, будет использоваться однобайтовая кодировка, поэтому размер массива в символах и в байтах совпадает.
  4. При использовании строки в C++ вместо user_pass нужно было бы указать user_pass[], чтобы указать, что это массив.
  5. В C++ вместо user_pass можно было бы использовать std::string, чтобы работать с строками более удобным способом.
  6. Если в C++ использовать std::getline для чтения строки, то его можно было бы заменить на fgets в C.
  7. Вместо user_pass можно было бы использовать любую другую переменную, например, password.
  8. Если в C++ использовать std::string для хранения строки, то его можно было бы заменить на char* в C.
  9. Если в C++ использовать std::stringstream для обработки строки, то его можно было бы заменить на sscanf в C.
  10. Если в C++ использовать std::cout для вывода строки, то его можно было бы заменить на printf в C.
  11. Если в C++ использовать std::cin для ввода строки, то его можно было бы заменить на scanf в C.
  12. Если в C++ использовать std::string для хранения строки, то его можно было бы заменить на char* в C, указав user_pass как массив символов.
  13. Если в C++ использовать std::stringstream для обработки строки, то его можно было бы заменить на sscanf в C, указав user_pass как массив символов.
  14. Если в C++ использовать std::cout для вывода строки, то его можно было бы заменить на printf в C, указав user_pass как массив символов.
  15. Если в C++ использовать std::cin для ввода строки, то его можно было бы заменить на scanf в C, указав user_pass как массив символов.
  16. В данном коде не происходит ничего, кроме объявления переменной user_pass.
  17. Нет никаких операций с этой переменной, поэтому она остается неинициализированной.
  18. Нет никаких условий или циклов, которые могли бы изменить значение этой переменной.
  19. Нет никаких функций или операций, которые могли бы использовать эту переменную.
  20. Нет никаких других переменных или структур данных, которые могли бы быть связаны с этой переменной.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.077 из 5