gpt4 book ai didi

c - 输入间隔直到 CTRL + D

转载 作者:行者123 更新时间:2023-12-02 01:06:43 24 4
gpt4 key购买 nike

我将间隔写为 <a;b>我用scanf("<%d;%d>", &a, &b);读的,但问题是我需要在许多这样的时间间隔内使用我的函数,直到我按下 CTRL + ZCTRL + D在 Unix 上。

到目前为止,我尝试过类似的方法,但它不起作用。

int main( void ) {
int a=0, b=0;

printf("Intervals:\n");
while(scanf("<%d;%d>", &a, &b) == 2 && !feof(stdin)){

printf("Distinct rectangular cuboids: %d\n", capacities(a, b));

}
return 0;

最佳答案

您的问题不够简洁。这:

int main( void ) { 
int a=0, b=0;

printf("Intervaly: \n");
while(scanf("<%d;%d>",&a,&b) == 2){
printf("Ruznych kvadru: %d\n", capacity(a, b));
}
return 0;
}

实际上做你想做的,要么用一长串 <%d;%d>或逐行 - 两者都可以。你的问题隐藏在评论中,EOF 不会立即终止它 - 而你需要 CTRL-D 两次来停止它。原因也在评论中。

按照您的方式扫描后,您将得到 \n。在输入流中(因为您必须按回车键才能在不终止的情况下发送您的输入)。有两种方法可以解决这个问题——将其添加到 scanf 中,不太灵活,有一些问题,或者暂时清除它:

while(scanf("<%d;%d>",&a,&b) == 2){ 
printf("Ruznych kvadru: %d\n", capacity(a, b));
getchar();
}

您会发现现在需要按一次 CTRL-D。如果您尝试从文件输入重定向,您会发现这个问题也不存在。为什么会这样?你有 \n在输入流中。你按 EOF,所以 scanf 得到一个换行符并忽略它——等待新的输入。只有现在一个新的 EOF 才会杀死 scanf .

我建议在本网站上搜索 scanf了解为什么不使用它的问题,以及其他不错的选择。

附录

在评论中给出并由@BluePixy 向我指出并由@DavidBowling 向我指出的更优雅的解决方案是用于您的 scanf :

scanf("<%d;%d>%*c", &a, &b);

这自然会吞噬掉额外的字符,包括新的空格,而不需要额外的 getchar .我认为这是对此 scanf 最优雅的解决方案用法。

更多

根据 OP 和 David 的评论(再次感谢!)为了占 0 个或更多空格,您只需要在格式中使用空格指令:

scanf("< %d ; %d >%*c", &a, &b);

现在可以(也可以不)在每个整数周围添加空格。

关于c - 输入间隔直到 CTRL + D,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47202353/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com