Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C中检查scanf中的额外输入?_C_Scanf - Fatal编程技术网

如何在C中检查scanf中的额外输入?

如何在C中检查scanf中的额外输入?,c,scanf,C,Scanf,我正在使用scanf()获取x的值,我想检查是否输入了除单个整数以外的任何值;如果是,我想重新获取输入 以下是我目前的情况: #include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char const *argv[]) { int x; char c; int input = scanf("%i%c", &

我正在使用
scanf()
获取x的值,我想检查是否输入了除单个整数以外的任何值;如果是,我想重新获取输入

以下是我目前的情况:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char const *argv[])
{
    int x;
    char c;

    int input = scanf("%i%c", &x, &c);

    while (input != 2 || c != '\n')
    {
        input = scanf("%i%c", &x, &c);
    }

    printf("x = %i\n", x);
}
#包括
#包括
#包括
int main(int argc,char const*argv[]
{
int x;
字符c;
int input=scanf(“%i%c”、&x、&c);
while(输入!=2 | | c!='\n')
{
输入=扫描频率(“%i%c”、&x、&c);
}
printf(“x=%i\n”,x);
}
此时,当我输入由空格分隔的2个整数时,例如
23 43
,程序将输出43,而不是再次请求输入

任何帮助都将不胜感激


谢谢。

你需要用其他方法来做这件事,因为int只允许单个数字示例:1000你可以像:1000 2000那样做,但是还有另一种方法,你可以让用户知道他要键入的数字的数量,然后为scanf循环数字的数量,然后你可以做任何你想做的事情示例:

#include <stdio.h>

int main()
{
    int loopTime = 0;
    int temp = 0;
    int result = 0;

    printf("Enter the count of number you need to enter: ");//the number of times scanf going to loop
    scanf("%d", &loopTime);

    printf("Now enter the numbers you going to store but after every number you need to press enter\n");

    for (int i = 0; i < loopTime; i++)
    {
        scanf("%d", &temp);
        result += temp;
    }

    printf("The Result is: %i", result);
    return 0;
}
#包括
int main()
{
int loopTime=0;
内部温度=0;
int结果=0;
printf(“输入需要输入的计数:”);//scanf进入循环的次数
scanf(“%d”、&loopTime);
printf(“现在输入要存储的数字,但在每个数字之后需要按enter\n”);
for(int i=0;i
考虑使用
strtol()
检查字符串中的所有字符是否已转换为数字。使用
fgets
或任何其他行读取器读取字符串,并从中提取数字:

char buffer[4096];
fgets(buffer, sizeof(buffer), stdin);
char *endptr;
long result = strtol(buffer, &endptr, 10);
if(*endptr != '\0') { /* There is more input! */ }

作为奖励,您可以读取非十进制数字,还可以检查输入的数字是否在可接受的范围内。

是否可以在没有长整数的情况下执行此操作?如果需要,您可以将结果强制转换为
int
int result=(int)strtol…