无法使用 libcurses 打印包含 space 的句子
Cannot print a sentence including space with libcurses
#include <curses.h>
int main(){
initscr();
refresh();
char s[25];
mvprintw(1,0,"Enter sentence: ");
refresh();
scanw("%s", s); // Input `one two`.
mvprintw(2,0,"%s\n", s); // This just prints `one`.
refresh();
getch();
endwin();
return 0;
}
输入为one two
。
输出只是 one
,缺少后半部分。
scanw
没有正确处理空格吗?
scan
函数通常在空格处中断,所以
scanw("%s", s);
做
scanw("%24[^\n]", s); // always do bounds checking
即最多读取24个非换行符。
而且,您应该始终检查提取是否有效:
if(scanw("%24[^\n]", s) == 1) { ... }
如果您混合来自各处的输入,请考虑使用“吃掉”剩菜的“贪婪”版本:
scanw(" %24[^\n]", s) // note the space at the beginning
#include <curses.h>
int main(){
initscr();
refresh();
char s[25];
mvprintw(1,0,"Enter sentence: ");
refresh();
scanw("%s", s); // Input `one two`.
mvprintw(2,0,"%s\n", s); // This just prints `one`.
refresh();
getch();
endwin();
return 0;
}
输入为one two
。
输出只是 one
,缺少后半部分。
scanw
没有正确处理空格吗?
scan
函数通常在空格处中断,所以
scanw("%s", s);
做
scanw("%24[^\n]", s); // always do bounds checking
即最多读取24个非换行符。
而且,您应该始终检查提取是否有效:
if(scanw("%24[^\n]", s) == 1) { ... }
如果您混合来自各处的输入,请考虑使用“吃掉”剩菜的“贪婪”版本:
scanw(" %24[^\n]", s) // note the space at the beginning