如何在 C 语言中正确使用 setvbuf?
How to properly use setvbuf in C?
我想使用 setvbuf()
将我的输入流设置为无缓冲,但我真的不知道如何使用它。
我进行了一些谷歌搜索,发现当您将流设置为无缓冲时,缓冲区和大小参数将被忽略,如 this article 所述。
这是我的代码:
#include "structures.h"
#include "functions.h"
char choice;
int option;
int main(void) {
while(1) {
puts("============================================Select an Option============================================");
puts("1. Create Linked List");
puts("2. Display items");
puts("3. Add item to the beginning");
puts("4. Add item to the end");
puts("5. Add item in the middle");
puts("6. Delete item from the beginning");
puts("7. Delete item from the end");
puts("8. Delete item from the middle");
puts("9. Exit");
printf(">>> ");
setvbuf(stdin, _IONBF);
choice = getchar();
cleanStdin();
option = choice - '0';
//...
}
}
文章说它们被忽略了,但我仍然收到关于参数不足的错误,所以我不知道该放什么。有人可以帮我吗?
使用假参数:
setvbuf(stdin, NULL, _IONBF, 0);
但是,这将不允许您在不按 Enter
的情况下从终端读取字符,这是一个终端问题,而不是缓冲问题,因为您需要别的东西。
您可以使用 ncurses
,这是建议的路线,但您也可以使用此 post What is the equivalent to getch() & getche() in Linux? 中已接受的答案,这样您就可以做到这一点。
你可以看到它在这里工作:https://replit.com/@anastaciu/ConcernedAncientMenu
我想使用 setvbuf()
将我的输入流设置为无缓冲,但我真的不知道如何使用它。
我进行了一些谷歌搜索,发现当您将流设置为无缓冲时,缓冲区和大小参数将被忽略,如 this article 所述。
这是我的代码:
#include "structures.h"
#include "functions.h"
char choice;
int option;
int main(void) {
while(1) {
puts("============================================Select an Option============================================");
puts("1. Create Linked List");
puts("2. Display items");
puts("3. Add item to the beginning");
puts("4. Add item to the end");
puts("5. Add item in the middle");
puts("6. Delete item from the beginning");
puts("7. Delete item from the end");
puts("8. Delete item from the middle");
puts("9. Exit");
printf(">>> ");
setvbuf(stdin, _IONBF);
choice = getchar();
cleanStdin();
option = choice - '0';
//...
}
}
文章说它们被忽略了,但我仍然收到关于参数不足的错误,所以我不知道该放什么。有人可以帮我吗?
使用假参数:
setvbuf(stdin, NULL, _IONBF, 0);
但是,这将不允许您在不按 Enter
的情况下从终端读取字符,这是一个终端问题,而不是缓冲问题,因为您需要别的东西。
您可以使用 ncurses
,这是建议的路线,但您也可以使用此 post What is the equivalent to getch() & getche() in Linux? 中已接受的答案,这样您就可以做到这一点。
你可以看到它在这里工作:https://replit.com/@anastaciu/ConcernedAncientMenu