输入如何在C中工作

时间:2014-10-23 16:53:24

标签: c input scanf

我对函数scanf以及输入在C中的工作方式感到很困惑。

请参阅此代码:

#include<stdio.h>

int main()
{
    FILE pt = *stdin;
    char b[100];
    scanf("%s", b);
    scanf("%s", b); //breakpoint here
    scanf(" ");     //breakpoint here
}

代码运行时,我将12345输入控制台。我发现pt _ptr(我实际上并不知道它是什么)的值为"12345\n\n"b[]的值为"12345"

然后我继续该程序并输入23456。现在pt _ptr"23456\n\n"b[]"23456"

我的问题:

  • 输入如何在C中工作?为什么pt _ptr的值"12345\n\n"不是"12345\n",因为我只按了一次输入(似乎函数scanf跳过了这两个\n已成功阅读"12345")。

2 个答案:

答案 0 :(得分:2)

你正在寻找地毯......你不应该复制FILE结构,所以第一行

FILE pt = *stdin;

结果实际上是未定义的。不要看里面,除非你愿意阅读并理解标准C库的来源!

代码的其余部分非常容易理解,因为b始终具有预期值,不是吗?

答案 1 :(得分:0)

除了学习scanf之外,你真正想做的事情并不明显,但你也在调用 stdin 和{{1}结构。

使用 fscanf ,(有关`fscanf的详细信息,请阅读链接)更容易使用这三个。

以下是如何组合 fscanf,FILE stdin 的简单示例:

FILE