以C语言输入/回车

以C语言输入/回车,c,newline,scanf,C,Newline,Scanf,不完全是多尼什曼的妻子,但嘿,我的预算很低,头脑也不清醒。除息的 scanf是用这种写作方式(看看我在那里做了什么)来处理这个问题的吗 更新-根据答案a进行更新 # make test cc test.c -o test # ./test I am a happy yam until i hit return... # ./test because it ends my [BLEEPING] program.... # ./test OOOH how my blood doth b

不完全是多尼什曼的妻子,但嘿,我的预算很低,头脑也不清醒。除息的 scanf是用这种写作方式(看看我在那里做了什么)来处理这个问题的吗

更新-根据答案a进行更新

# make test
cc     test.c   -o test
# ./test
I am a happy yam until i hit return...
# ./test
because it ends my [BLEEPING] program....
# ./test
OOOH  how my blood doth burn !!!  ...doth? ...doest? ...meh...
# cat test.c
#include "usual_suspects.h"

int main()
{
    int i;
    scanf( "%d", &i);
}
# echo 'So, how do I continue onto the next line
> without terminating the program? Not a wrapping function but,surviving
> hitting the enter key?
最终编辑,承诺=D 好吧,我想这是我能想到的最小一点了

# make test
cc     test.c   -o test
# ./test
Well blow me down, a cross-eyed clown !
Said a can of yams imported from Spain.
If i had a bucket to spit,       
I'd sorely say frak-it and quit !
Whilst watching my brine wash away
        with the rain. xD
^C
# YES !!!!!!!!!
bash: YES: command not found
# cat test.c
#include "usual_suspects.h"

int main()
{
    int i;
    while (true) {
        scanf("&d", &i);
    }
}
调用
scanf()
时,程序将阻塞,等待控制台输入。因此,一旦按enter键,您提交的输入将被读入,
scanf()
将返回。一旦
scanf()
返回,您的程序将继续执行。在您给出的示例中,在
scanf()
返回后,没有更多的代码可执行。因此,
main()
函数隐式返回0并导致程序退出

如果要继续按输入行读取,可以执行以下操作:

#include "usual_suspects.h"
    int main()
    {
        while (true) {         
        scanf("%d");
        }
    }
实际上,正如埃利奥特·弗里希(Elliot Frisch)所提到的,有更好的方法可以做到这一点。但原则上,这是我认为您正在尝试做的。

函数执行您所说的操作。它将读取指定数量的字节或直到达到EOF,EOF在unix上通过CTRL+D输入键盘

while (true) {
    scanf("%d", &i);
}

但是上面的代码满足了您的要求。

您想阅读多少行?如果您想使用这样的行;看看或者。对于按键组合(和终端操作),我建议和/或。您将
%d
更改为
&d
。哎呀!传递给
scanf()
的第一个参数是格式字符串。格式字符串用于许多函数,如
scanf()
printf()
。我建议阅读一些关于格式字符串的文章,以便更好地理解它们是如何工作的。也就是说,
%d
用作格式字符串的格式说明符,当在格式字符串中找到它时,它会变得“特殊”<另一方面,code>&d只是格式字符串上下文中的纯文本。请注意,
&
,在格式字符串或任何其他字符串的上下文中,只是一个字符,其功能与运算符的地址不同。在格式字符串中使用
%d
&d
之间没有明显差异,这是可以预料的,因为您似乎没有对变量
i
执行任何操作。同样,我建议研究格式字符串是如何工作的,以便理解为什么会出现这种情况。但在您的示例中,您使用
%d
(或类似的格式说明符)而不是
&d
,这是有意义的,并且是可以预期的,在这种情况下,这在上下文中没有真正意义。同样感谢这一点,我会进行绿色检查,但hexturtle不会这样做。
fgets
远远优于
scanf(“%s”
如果您只想逐行读取输入,那么使用
scanf
是一种困难、缓慢、低效的方法。
#include <stdio.h>
#include <unistd.h>

#define MAX_STR_LEN 500

int main()
{
    // Declare a char array to read into
    char str[MAX_STR_LEN + 1];

    // Read into the char array until MAX_STR_LEN bytes
    // have been read or EOF
    fread(str, 1, MAX_STR_LEN, stdin);

    // Null Terminate and print what we read in
    str[MAX_STR_LEN] = '\0';
    printf("%s", str);
    fflush(stdout);
}
while (EOF != scanf("%s", &str)) {
   // Do something
}