如果所需输入存在,C 仅从标准输入读取

标签 c stdin scanf getline

我正在开发一个 C 程序,我希望用户在标准输入中输入以下格式:

<integer1> <string> <optional-integer2>

当 integer2 始终存在时,我的程序可以正常工作。例如“3 birds 2”将运行良好。但是我尝试过的每一种方法都会导致程序挂起,如果它接收到没有可选部分的输入,比如“5 只猫”。如何让程序检查可选整数是否存在,如果不存在则跳过读取?

这是我正在使用的:

int main(){
    //help();
    size_t size = 20;
    ssize_t len;
    long num1 = 1111;
    long num2 = 2222;
    char *word;
    char chunks[3][20];
    printf("(enter command): ");
    char delimeter;
    char *cp;
    int i;
    while(1){
        cp = chunks[0];
        delimeter = ' ';
        for(i = 0; i < 3; i++){
            if(i == 2)
                delimeter = '\n';
            cp = chunks[i];
            len = getdelim(&cp, &size, delimeter, stdin);
            *(cp+(len - 1)) = '\0';
            printf("cp: '%s'\n", cp);
        }
        for (i = 0; i < 3; i++){
            printf("chunks[%d]: '%s'\n", i, chunks[i]);
        }

最佳答案

与其尝试从 stdin 读取 3 次,不如读取整行输入一次,然后检查您的字符串是否包含 2 或 3 个有效字段。这样,如果输入只有 2 个部分,您的读取函数就不会阻塞。

关于如果所需输入存在,C 仅从标准输入读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12129134/

相关文章:

c - Microsoft 的 fopen 提交模式标志在 Windows 7 上被破坏了吗?

c - 具有包含可变大小对象的结构的 Malloc

c - 从文件中读取带空格的字符串

c - fscanf--尝试扫描int的txt文件,fscanf只读取1s

c - 段错误(核心转储)-此错误仅有时显示,我似乎无法修复它

c - 如何在 MATLAB MEX 文件中使用 FFTW lib 文件?

c++ - 如何从 C++ 的标准输入中读取 n 个整数?

c++ - select() 没有获取标准输入

go - 带字符串的奇怪行为.TrimSuffix\n

C: fscanf 不改变文件流