标签: c

C getchar vs scanf

在我正在研究的函数中发现的一段代码让我感到困惑:

char GetCommand( void )
{
    char command;

    do {
        printf( "Enter command (q=quit, n=new, l=list):  " );
        scanf( "%c", &command );
        Flush();
    }
    while ( (command != 'q') && (command != 'n')
           && (command != 'l') );

    printf( "\n----------\n" );
    return( command );
}

void Flush( void ) {
    while ( getchar() != '\n' )
        ;
}
Run Code Online (Sandbox Code Playgroud)

我在这里不太明白的是该Flush()功能的用法.我的意思是,我正在阅读的书通过说它阻止用户输入多个单个字符然后在第二次提示输入时读取该字符来解释它.

我不明白的是如何Flush()防止这种情况发生.它什么都不做.它只是一个while命令.(虽然这是真的......什么?????)没有意义.

c scanf getchar

12
推荐指数
1
解决办法
2万
查看次数

标志如何在C中起作用?

最近我在C和C++中遇到了几个"标志"的例子,我不太明白它们是如何工作的.在查看了一些源代码后,我注意到通常标志值以十六进制定义,如下所示:

FLAG1 = 0x00000001,
FLAG2 = 0x00000010,
Run Code Online (Sandbox Code Playgroud)

我的直觉表明这些价值正在被合并.通过将所有标志值组合到一个int中,标志是否有效?如果我使用了这两个,FLAG1 | FLAG2结果会是0x00000011什么?

我是否需要创建具有位偏移的枚举,或者我可以使用升序整数如下:

FLAG1 = 1;
FLAG2 = 2;
Run Code Online (Sandbox Code Playgroud)

c c++ flags integer

12
推荐指数
4
解决办法
1万
查看次数

如何在Linux中获得键盘状态?

我想在程序启动时检查用户是否按下了SHIFT键.(这意味着,在程序启动之前按下SHIFT键)这是一个简单的控制台程序,与X无关.

这可能类似于Win32 GetKeyboardState()功能.

我想知道我是否可以这样做,以及如何直接访问终端,但没有任何利弊.

c linux keyboard console

12
推荐指数
4
解决办法
1万
查看次数

具有Core 2 CPU(SSSE3)的大缓冲区的popcount

我正在寻找在512或更多字节的大缓冲区上popcount的最快方法.我可以保证任何所需的对齐,缓冲区大小总是2的幂.缓冲区对应于块分配,因此通常位是全部设置,没有设置,或者大多数设置有利于缓冲区的"左",偶尔出洞.

我考虑过的一些解决方案是:

我对最快的解决方案感兴趣,它必须适用于属于core2或更近的32位x86芯片组.SSE和SIMD非常感兴趣.我将在以下四核CPU上进行测试:

matt@stanley:~/anacrolix/public/stackoverflow$ cat /proc/cpuinfo 
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 15
model name      : Intel(R) Core(TM)2 Quad CPU    Q6600  @ 2.40GHz
stepping        : 11
cpu MHz         : 1600.000
cache size      : 4096 KB
physical id     : 0
siblings        : 4
core id         : 0
cpu cores       : 4
apicid          : 0
initial apicid  : 0
fdiv_bug        : no
hlt_bug         : no
f00f_bug        : no
coma_bug        : …
Run Code Online (Sandbox Code Playgroud)

c optimization x86 assembly hammingweight

12
推荐指数
2
解决办法
8386
查看次数

为控制台应用程序制作UI

如何为控制台应用程序创建一个界面,使其edit.com在Microsoft的操作系统下看起来像.目标语言是C,C++和C#.NET.

MS-DOS编辑器

c c# c++ user-interface console-application

12
推荐指数
2
解决办法
2万
查看次数

12
推荐指数
5
解决办法
5456
查看次数

设置读取标准输入的超时时间

有没有办法超时stdin读取,以免程序挂起太长时间?

read(0, var, numberofbytes);
Run Code Online (Sandbox Code Playgroud)

c posix

12
推荐指数
2
解决办法
8274
查看次数

如何在C/Objective C中实现位数组

iOS/Objective-C:我有一大堆布尔值.

这是存储这些值的低效方法 - 当只需要一个时,每个元素至少使用8位.

我该如何优化?

c objective-c core-foundation bitarray ios

12
推荐指数
3
解决办法
9212
查看次数

通过C API从字符串创建和调用python函数

是否可以从字符串加载python函数,然后使用参数调用该函数并获取返回值?

我正在使用python C API从我的C++应用程序中运行python代码.我能够从文件中加载一个模块PyImport_Import,从中获取一个函数对象PyObject_GetAttrString,然后调用该函数PyObject_CallObject.我想做的是从字符串而不是文件加载模块/函数.是否有一些相当于PyImport_Import允许我传递一个字符串而不是文件?我需要将参数传递给我正在调用的函数,我需要访问返回值,所以我不能只使用PyRun_SimpleString.


编辑:

在开启后我找到了这个解决方案PyRun_String.我正在创建一个新模块,获取它的字典对象,在调用时传递它以PyRun_String在我的新模块中定义一个函数,然后为新创建的函数获取一个函数对象并PyObject_CallObject通过我的args 调用它.这是我发现解决我的问题: main.cpp


int main()
{
    PyObject *pName, *pModule, *pArgs, *pValue, *pFunc;
    PyObject *pGlobal = PyDict_New();
    PyObject *pLocal;

    //Create a new module object
    PyObject *pNewMod = PyModule_New("mymod");

    Py_Initialize();
    PyModule_AddStringConstant(pNewMod, "__file__", "");

    //Get the dictionary object from my module so I can pass this to PyRun_String
    pLocal = PyModule_GetDict(pNewMod);

    //Define my function in the newly created module
    pValue = PyRun_String("def …
Run Code Online (Sandbox Code Playgroud)

c python embed

12
推荐指数
2
解决办法
7803
查看次数

如何仅使用Bitwise运算符实现Bitcount?

任务是仅使用按位运算符实现位计数逻辑.我的工作正常,但我想知道是否有人可以提出更优雅的方法.

只允许使用Bitwise操作.没有"if","for"等

int x = 4;

printf("%d\n", x & 0x1);
printf("%d\n", (x >> 1) & 0x1);
printf("%d\n", (x >> 2) & 0x1);
printf("%d\n", (x >> 3) & 0x1);
Run Code Online (Sandbox Code Playgroud)

谢谢.

c bit-manipulation

12
推荐指数
1
解决办法
4万
查看次数