与C ++ cin语句相当的C是什么?

时间:2010-09-16 03:55:53

标签: c++ c

与C ++ cin语句相当的C是什么?我也可以看到它的语法吗?

4 个答案:

答案 0 :(得分:18)

cin不是一个语句,它是一个引用标准输入流的变量。所以C中最接近的匹配实际上是stdin

如果你有一个C ++语句,如:

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

C中的类似事情是使用各种输入函数:

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

请参阅an earlier answer我今天提出了一个问题,就是一种安全地进行线路输入和解析的方法。它基本上输入一行fgets(利用其缓冲区溢出保护),然后使用sscanf安全地扫描该行。

gets() scanf()的某些变体之类的内容(如无界字符串)应该像瘟疫一样避免,因为它们很容易受到缓冲区溢出的影响。它们适合玩耍,但是越早学会避免它们,你的代码就会越强大。

答案 1 :(得分:9)

您可能需要scanf

链接中的一个例子:

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

但请注意(如评论中所述)scanf易于buffer overrun,并且您可以使用许多其他输入函数(请参阅stdio.h)。

答案 2 :(得分:2)

C中没有与cin等效的近似值.C ++是一种面向对象的语言,而cin使用了C上没有的许多功能(面向对象,模板,运算符重载)。

但是,您可以使用C标准库读取C中的内容,您可以在此处查看相关部分(cstdio reference)。

答案 3 :(得分:1)

在c ++中,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;
}

<强>更新

我已将其更改为使用fgets,这更简单,因为您必须担心缓冲区的大小。如果您还想解析输入使用scanf,但请确保使用width属性