Что такое C, эквивалентное CIN-заявлению С++?

Что такое C, эквивалентное оператору С++ cin? Также я могу увидеть синтаксис на нем?

Ответ 1

cin не является инструкцией, это переменная, которая ссылается на стандартный поток ввода. Итак, самое близкое совпадение в C на самом деле stdin.

Если у вас есть оператор С++, например:

std::string strvar;
std::cin >> strvar;

аналогичная вещь в C будет использовать любое из множества разнообразных входных функций:

char strvar[100];
fgets (strvar, 100, stdin);

См. более ранний ответ Сегодня я задал вопрос о том, как сделать линейный ввод и разбор безопасно. Он в основном вводит строку с fgets (используя защиту от переполнения буфера), а затем используя sscanf для безопасного сканирования строки.

Такие вещи, как gets(), и некоторые вариации scanf() (например, неограниченные строки) следует избегать, как чума, поскольку они легко восприимчивы к перегрузкам буфера. Они отлично подходят для игры, но чем раньше вы научитесь избегать их, тем более надежным будет ваш код.

Ответ 2

Вероятно, вы хотите scanf.

Пример из ссылки:

int i, n; float x; char name[50];
n = scanf("%d%f%s", &i, &x, name);

Обратите внимание, однако (как указано в комментариях), что scanf склонен к переполнение буфера, и есть много других функций ввода, которые вы могли бы использовать (см. stdio.h).

Ответ 3

Не существует близкого эквивалента cin в C. С++ - объектно-ориентированный язык, а cin использует многие его функции (объектная ориентация, шаблоны, перегрузка оператора), которые недоступны на C.

Однако вы можете читать вещи на C, используя стандартную библиотеку C, вы можете посмотреть здесь соответствующую часть (ссылка cstdio).

Ответ 4

В С++ cin является входным потоком stdin. В C нет входного потока, но есть файл-объект, называемый stdin. Вы можете прочитать это, используя множество способов, но вот пример cplusplus.com:

/* fgets example */
#include <stdio.h>

int main()
{
  char buffer[256];
  printf ("Insert your full address: ");
  if (fgets(buffer, 256, stdin) != NULL) {
    printf ("Your address is: %s\n", buffer);
  }
  else {
    printf ("Error reading from stdin!\n");
  }
  return 0;
}

UPDATE

Я изменил его, чтобы использовать fgets, что намного проще, так как вам нужно беспокоиться о том, насколько велик ваш буфер. Если вы также хотите проанализировать ввод, используйте scanf, но убедитесь, что вы используете атрибут width.