C 从字符向量中读取有符号数字
我遇到了这个问题,我真的需要帮助,我非常感谢: 当我使用C 从字符向量中读取有符号数字,c,fgets,negative-number,C,Fgets,Negative Number,我遇到了这个问题,我真的需要帮助,我非常感谢: 当我使用fgets()输入一个负数,然后尝试验证用户在fgets()读取的字符数组中输入的字符串是一个带有isdigit()的数字时,我总是得到正数,有没有办法读取负数。(我只需要读取数字,但可以使用scanf,因为当它读取字符时,会把我弄得一团糟) 下面是代码的一部分: char op[30]; int a[30]; int text_ssalto() { size_t len = strlen(op); fgets(op, s
fgets()
输入一个负数,然后尝试验证用户在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;
}
我想你的代码中可能有其他地方出错了,这里有一个与你的代码类似的示例,它正在工作。是否包含正确的标题
#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);
}
如果第一个字符是“-”
,则不起作用
而不是使用
if (isdigit(*op)) {
sscanf(op, "%d", &a[x]);
}
使用
该函数包含看似不必要的无关检查。可以简化为:
int text_ssalto() {
fgets(op, sizeof(op), stdin);
if ( sscanf(op, "%d", &a[x]) == 1)
{
// Got a number
// Use it.
}
return 0;
}
是的,我已经包含了所有这些标题,但无法获取。我想您可以测试我的代码,看看它是否有效。我不认为另一个答案提到的第一个字符是数字。至少在我的机器上,它可以工作。是的,它可以工作,但当我在if条件后尝试打印时,它会打印一个正数。当我打印a[x]时,我认为isdigit()
不会存储-
因为它不是一个数字如果isdigit(*op)
的测试失败,代码永远不会进入if语句的内部。我不知道你想做什么。
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;
}