我遇到了这个问题,我真的需要帮助,我会非常感激:
当我使用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;
}
答案 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);
}