【问题标题】:Stdin doesn't work when I run the program运行程序时标准输入不起作用
【发布时间】:2019-06-23 05:52:03
【问题描述】:

我在 code.c 中有以下 C 代码

int main(int argc, char *argv[]) {
    FILE *openFile = NULL;
    openFile=stdin;
}

但是当我用

编译和运行我的代码时
gcc -g -o compiledcode code.c
./compiledcode

终端不会提示我输入。怎么了?

【问题讨论】:

  • 这就是你的全部代码吗?
  • 欢迎(返回)到 Stack Overflow。请重新阅读How to Ask 页面,更紧急的是,阅读有关如何创建 MCVE (minimal reproducible example) 的信息。您提供的内容太少而无用。我们只能假设第二行在函数内部;第一个可能在函数内部或外部。没有足够的信息知道还有什么问题。
  • 是的,这就是我在 main.js 中的所有代码。我现在将编辑它以显示主要功能
  • 您没有提示用户输入任何内容,也没有尝试读取任何输入内容。您所做的只是将文件流指针openFile 设置为指向标准输入;你从来没有读过任何东西(或写过任何东西)。我顺便指出,由于您没有使用命令行参数,因此您应该写 int main(void) 而不是 int main(int argc, char **argv)
  • 好的,那我如何使用标准输入请求输入?

标签: c terminal


【解决方案1】:

您只是将标准输入作为文件打开,但没有读取您的文件。 从标准输入获取输入的方式有很多种。

函数getchar 可用于从标准输入读取单个字符。使用getc()fgetc() 从任意文件流中读取。 示例:

int c = getchar();
printf("you entered %c\n", c);

函数fgets 可用于从文件中读取一行。 示例:

char data[200];
fgets(data, sizeof(data), stdin); // we type stdin as file.
printf("you entered %s\n", data);

函数scanf 及其函数族可用于从标准输入读取许多不同的格式。 示例:

char data[200]; // size need be bigger or equal to input length
scanf("%199s", data);  // Protect from buffer overflow
printf("you entered %s\n", data);

【讨论】:

  • 你永远不应该使用gets。请改用 fgets()。是更安全的功能。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-07
  • 1970-01-01
相关资源
最近更新 更多