与C ++ cin
语句相当的C是什么?我也可以看到它的语法吗?
答案 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属性。