以C语言输入/回车
不完全是多尼什曼的妻子,但嘿,我的预算很低,头脑也不清醒。除息的 scanf是用这种写作方式(看看我在那里做了什么)来处理这个问题的吗 更新-根据答案a进行更新以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
# 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
}