从char矢量中读取带符号的数字

时间:2015-05-14 02:59:54

标签: c fgets negative-number

我遇到了这个问题,我真的需要帮助,我会非常感激: 当我使用fgets()输入负数时,然后尝试验证用户在char数组中输入的字符串fgets()读取的数字是isdigit()我得到的数字总是正数,有没有办法读取负数。 (我只需要读取数字,但可以使用scanf,因为当它读取一个字符时,它会让我一团糟)

这是代码的一部分:

char op[30];
int a[30];

int text_ssalto() {
    size_t len = strlen(op);
    fgets(op, sizeof(op), stdin);
    len = strlen(op);
    if (len > 0) {
        op[len - 1] = '\0';
    }

    if (isdigit(*op)) {
        sscanf(op, "%d", &a[x]);
    }

    return 0;
}

2 个答案:

答案 0 :(得分:2)

if (isdigit(*op)) {
如果第一个字符为'-'

将无效。

而不是使用

if (isdigit(*op)) {
    sscanf(op, "%d", &a[x]);
}

使用

if ( sscanf(op, "%d", &a[x]) == 1 )
{
   // Got a number.
   // Use it.
}

该功能包含似乎不必要的无关检查。它可以简化为:

int text_ssalto() {
   fgets(op, sizeof(op), stdin);
   if ( sscanf(op, "%d", &a[x]) == 1)
   {
      // Got a number
      // Use it.
   }

   return 0;
}

答案 1 :(得分:1)

我想也许你的代码中的其他地方有问题,这里有一个类似于你的样本,它正在运行。你有没有正确的标题?

#include "ctype.h"
#include "stdlib.h"
#include "stdio.h"

int main ()
{
        char op[30];
        fgets(op, sizeof(op), stdin); /* input -11 */
        printf("%s\n", op); /* output -11 */
        if (isdigit(*op)) {
            printf("wrong\n"); // never got printed if input is negative
            sscanf(op, "%d", &a[x]); // read positive number     
        }
        else {
              sscanf(op + 1, "%d", &a[0]); // now a[0] has the positive part
              a[0] = -a[0]; // make it negative if you want.
        }

        return (0);
}