在 c 中读入一个 int 并忽略其他任何内容
Read in an int in c and ignore anything else
我正在尝试使用 scanf()
读取一个 int 以用于以后的计算,但我试图让它丢弃 int 之后的任何内容。
本质上我希望能够提示用户回答诸如
这样的问题
3 + 5 是多少?
并且用户能够输入 8 或 8 dog 或任何具有这种性质的东西,并且它被同等对待。我曾尝试使用 scanf("%*[^\n]\n");
但这会导致其他提示导致程序其他地方出现问题
无法正确显示。我还应该读入的值(在本例中为 8)用于其他计算,我需要删除狗部分,因为它也会在程序中引起问题。
用于澄清评论中问题的示例代码
printf("What is %d %c %d ", a, oper, b);
fgets(line, sizeof(line), stdin);
errno = 0;
num = strtol(line, NULL, 10);
if (num == answer)
{
printf("Correct!");
right++;
}
else
{
printf("Wrong!");
}
printf("\n");
if (errno != 0)
{
printf("Invalid input, it must be just a number \n");
}
基本上这部分对用户输入的数学问题进行评分
尝试以这种方式读取输入时,使用 scanf
可能会很棘手。我建议使用 fgets
阅读整行,然后使用 strtol
将结果转换为数字。
char line[100];
long int num;
fgets(line,sizeof(line),stdin);
errno = 0;
num = strtol(line, NULL, 10);
if (errno != 0) {
printf("%s is not a number!\n", line);
}
编辑:
你的内容看起来不错,尽管正如 chux 在评论中指出的那样,它没有正确检测到非数值。
应该这样做:
int main()
{
int a, b, answer, right;;
char oper, *p;
char line[100];
long int num;
right=0;
a=3, b=5, oper='+', answer=8;
printf("What is %d %c %d ", a, oper, b);
fgets(line, sizeof(line), stdin);
errno = 0;
num = strtol(line, &p, 10); // p will point to the first invalid character
if (num == answer)
{
printf("Correct!");
right++;
}
else
{
printf("Wrong!");
}
printf("\n");
if (errno != 0 || p == line)
{
printf("Invalid input, it must be just a number \n");
}
}
我正在尝试使用 scanf()
读取一个 int 以用于以后的计算,但我试图让它丢弃 int 之后的任何内容。
本质上我希望能够提示用户回答诸如
这样的问题3 + 5 是多少?
并且用户能够输入 8 或 8 dog 或任何具有这种性质的东西,并且它被同等对待。我曾尝试使用 scanf("%*[^\n]\n");
但这会导致其他提示导致程序其他地方出现问题
无法正确显示。我还应该读入的值(在本例中为 8)用于其他计算,我需要删除狗部分,因为它也会在程序中引起问题。
用于澄清评论中问题的示例代码
printf("What is %d %c %d ", a, oper, b);
fgets(line, sizeof(line), stdin);
errno = 0;
num = strtol(line, NULL, 10);
if (num == answer)
{
printf("Correct!");
right++;
}
else
{
printf("Wrong!");
}
printf("\n");
if (errno != 0)
{
printf("Invalid input, it must be just a number \n");
}
基本上这部分对用户输入的数学问题进行评分
尝试以这种方式读取输入时,使用 scanf
可能会很棘手。我建议使用 fgets
阅读整行,然后使用 strtol
将结果转换为数字。
char line[100];
long int num;
fgets(line,sizeof(line),stdin);
errno = 0;
num = strtol(line, NULL, 10);
if (errno != 0) {
printf("%s is not a number!\n", line);
}
编辑:
你的内容看起来不错,尽管正如 chux 在评论中指出的那样,它没有正确检测到非数值。
应该这样做:
int main()
{
int a, b, answer, right;;
char oper, *p;
char line[100];
long int num;
right=0;
a=3, b=5, oper='+', answer=8;
printf("What is %d %c %d ", a, oper, b);
fgets(line, sizeof(line), stdin);
errno = 0;
num = strtol(line, &p, 10); // p will point to the first invalid character
if (num == answer)
{
printf("Correct!");
right++;
}
else
{
printf("Wrong!");
}
printf("\n");
if (errno != 0 || p == line)
{
printf("Invalid input, it must be just a number \n");
}
}