我们知道stdin默认情况下是缓冲输入; 证据就是使用"保留数据"的任何机制stdin,例如scanf():
int main()
{
char c[10] = {'\0'};
scanf("%9s", c);
printf("%s, and left is: %d\n", c, getchar());
return 0;
}
Run Code Online (Sandbox Code Playgroud)
./a.out
你好,
你好,左边是10
10 当然是换行...
我一直很好奇,有没有办法"偷看" stdin缓冲区而不删除那里可能存在的东西?
编辑
一个更好的例子可能是:
scanf("%9[^.]", c);
Run Code Online (Sandbox Code Playgroud)
输入"at.ct"后,现在我还有"data"(ct\n)stdin,而不仅仅是换行符.
我正在为基于ARM的目标(TI AM335x EVM)进行Qt5.2应用程序的交叉编译,但它无法在我的平台上显示任何内容.做了一些google'ing之后,我发现如果我用以下方式启动它:
./helloworld -platform eglfs
Run Code Online (Sandbox Code Playgroud)
它会出现(全屏,但它工作)!
我开始查看所有平台选项,我发现:
android,eglfs,linuxfb,minimalegl,windows,xcb,cocoa,ios,offscreen,qnx,directfp,kms,minimal,openwfd
我想知道他们是为了什么.我假设,例如,如果我想在Android设备上运行我的应用程序,我必须通过-platform android,但它们对我来说并不是很明显.
是否应该使用每个参数的列表?
例如,什么eglfs代表什么?为什么我需要使用那些linuxfb不起作用的地方?
(我原本以为linux帧缓冲区是我想要启动我的应用程序,因为它在嵌入式linux上运行)
我有一个问题是在两个数组中找到不同大小的公共元素.
Take,A1Size of size n和Array A2of size m,andm != n
到目前为止,我已经尝试逐个迭代列表并将元素复制到另一个列表.如果元素已经包含标记,但我知道它不是一个好的解决方案.
我正在线上学习Java教程,试图学习这门语言,并且它在使用数组的两种语义之间蹦蹦跳跳.
long results[] = new long[3];
results[0] = 1;
results[1] = 2;
results[2] = 3;
Run Code Online (Sandbox Code Playgroud)
和:
long results[] = {1, 2, 3};
Run Code Online (Sandbox Code Playgroud)
教程从未真正提到为什么它在两者之间来回切换,所以我对这个主题进行了一些搜索.我目前的理解是new操作员正在创建一个"longs数组"类型的对象.我不明白的是为什么我想要那个,那有什么后果?
new操作符初始化的对象进行清理?我来自C,所以我的Java术语在这里可能不正确,所以如果有些事情是不可理解的,请要求澄清.
我正在读Linux中的misc驱动程序,我对它们和char驱动程序之间的差异感到有些困惑.一个来源,Linux期刊写道:
Alessandro告诉我们如何使用misc驱动程序注册需要单个入口点的小型设备.
有时人们需要编写"小"设备驱动程序,以支持自定义黑客 - 无论是硬件还是软件.为此,以及托管一些真正的驱动程序,Linux内核导出一个接口,允许模块注册自己的小驱动程序.misc驱动程序是为此目的而设计的.
好的,所以从这里我得到一个简单的驱动程序(在这种情况下有一个入口点),这是一个misc驱动程序.然后另一个源,Essential Linux设备驱动程序,指出:
其他(或其他)驱动程序是具有某些共同特征的简单字符驱动程序.因为misc驱动程序是char驱动程序,所以早期关于char驱动程序入口点的讨论也适用于misc驱动程序.
现在,这似乎是说,其它司机都只是字符驱动,但也许一部分功能,而字符驱动可以有多个入口点(如一个ioctl()或一个open()或read()电话)
那么,在Linux C编码术语中,char和misc设备驱动程序之间的区别是什么?(除了明显的所有misc驱动程序的主要编号(10)).支持的入口点是否有区别?我的假设是否正确,misc设备驱动程序只有一个完整的char设备驱动程序可以获得的子集?
我想逐个得到一串数字,所以我使用一个while循环cin.get()作为逐个获取我的数字的函数.
但cin.get()得到数字为chars,即使我正在尝试使用转换我不能让我的变量包含数字值而不是我得到的数字的ascii值作为输入.
所以这是一个奇怪的,我知道代码本身是相当无用的,但我想知道为什么我得到错误:
我写了一些代码,我写了这个:
if(scan.hasNextInt())
int row = scan.nextInt();
Run Code Online (Sandbox Code Playgroud)
当时没有考虑变量范围,显然这是无用的,因为无论如何我都不能使用row过去if.我没有得到的是我收到错误的原因:
> javac hw.java
hw.java:25: '.class' expected
int row = scan.nextInt();
^
hw.java:25: not a statement
int row = scan.nextInt();
^
hw.java:25: illegal start of expression
int row = scan.nextInt();
^
hw.java:25: ';' expected
int row = scan.nextInt();
^
Run Code Online (Sandbox Code Playgroud)
现在,如果我只是修改它,如果检查:
if(scan.hasNextInt()) {
int row = scan.nextInt();
}
Run Code Online (Sandbox Code Playgroud)
它会编译好.我的印象是,如果if大括号下面有1行是可选的......显然还有其他考虑,或者两者都要编译或失败.
有人可以向我解释,或者指向一个文档,解释为什么我不能在if没有大括号的条件下声明局部变量?
编辑:这是完整的功能:
public static char getinput() {
System.out.println("Where do you want to go? (row column)");
Scanner …Run Code Online (Sandbox Code Playgroud) Make的输出中方括号中数字的重要性是什么?
make[7]: Leaving directory '/home/mike/...'
make[6]: Leaving directory '/home/mike/...'
make[6]: Entering directory '/home/mike/...'
Run Code Online (Sandbox Code Playgroud)
是make多线程,这是线程的编号,还是makefile遍历的级别,或者究竟是什么?它在我的大项目中数字较大,但在我个人的项目中(只有几个源文件),通常make[1]所以我认为它与复杂性有关.
我似乎无法在文档中找到它.
我有一个使用bitbake的OpenEmbedded环境来做一些构建.我希望得到一些"交互式"的东西,bitbake会暂停并询问输入然后继续构建,但我发现这是不可能的.
因为我不能这样做,所以我正在寻找一些方法来为构建传递额外的标志.有没有办法将标志传递给bitbake构建类似gcc的-D选项?
即:
bitbake -Dfoo=bar oe-myimage
Run Code Online (Sandbox Code Playgroud)
因此在oe-myimage变量的构建过程foo中将设置为bar.
build compiler-flags command-line-arguments openembedded bitbake
我想添加一个计时器而不是倒计时,它会在表单加载时自动启动.开始时间应为45分钟,一旦结束,即达到0分钟,表格应终止并显示一条消息.我怎样才能做到这一点?
语言:最好是C#.