C-如何扫描仅在符号后输入的整数

C-如何扫描仅在符号后输入的整数,c,string,int,strcmp,C,String,Int,Strcmp,我很难从用户输入中扫描一个整数,并且只有在直接打印后才存储它!: 我知道这对于strcmp来说是完全错误的语法,但这只是我收集用户输入的一个例子。你不喜欢自己编写一个检查程序吗 #include <ctype.h> #include <stdio.h> int check(const char *code) { if (code == NULL || code[0] != '!') return 0; while(*(++code) != '\0') {

我很难从用户输入中扫描一个整数,并且只有在直接打印后才存储它!:


我知道这对于strcmp来说是完全错误的语法,但这只是我收集用户输入的一个例子。

你不喜欢自己编写一个检查程序吗

#include <ctype.h>
#include <stdio.h>

int check(const char *code) {
    if (code == NULL || code[0] != '!') return 0;
    while(*(++code) != '\0') {
        if (!isdigit(*code)) return 0;
    }
    return 1;
}


/* ... */

if (check(cmd))
    sscanf(cmd + 1, "%d", &num);
strcmp不知道格式说明符,它只是比较两个字符串。sscanf做您想要的:它测试字符串是否具有特定格式,并将字符串的部分转换为其他类型

例如:

int n = 0;

if (sscanf(cmd, " !%d", &num) == 1) {
    // Do stuff; num has already been assigned
}
格式说明符%d告诉sscanf查找有效的十进制整数。感叹号没有特殊含义,只有在有感叹号时才匹配。前面的空格表示命令可能有前导空格。不,感叹号后面和数字前面可能有空格,数字很可能是负数

格式说明符是scanf系列的专用说明符,与PRINTF `%d格式相关,但与之不同。Is通常在其他字符串中没有意义,当在代码中发现它没有引号时肯定没有意义。

使用sscanf并检查其结果

char cmd[MAX_LINE/2 + 1];  
num = 0;  // Insure `num` has a known value
if (strcmp(cmd, "history") == 0)
   history(hist, current);
else if (strcmp(cmd, "!!") == 0)
   execMostRecHist(hist, current-1);
else if (sscanf(cmd, "!%d", &num) == 1)
   ;
else
   {//do stuff}

这意味着什么num=%d?只要设置为num,用户输入的int值就可以了!
char cmd[MAX_LINE/2 + 1];  
num = 0;  // Insure `num` has a known value
if (strcmp(cmd, "history") == 0)
   history(hist, current);
else if (strcmp(cmd, "!!") == 0)
   execMostRecHist(hist, current-1);
else if (sscanf(cmd, "!%d", &num) == 1)
   ;
else
   {//do stuff}