Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.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
忽略除整数之外的所有内容scanf_C - Fatal编程技术网

忽略除整数之外的所有内容scanf

忽略除整数之外的所有内容scanf,c,C,我想把一个整数数组作为输入。即使有人进入一个空间或阿尔帕哈伯,我想忽略它 int i=0; while(L--){ scanf("%d",&arr[i++]); } 但是如果我输入:4wtf则arr[0]初始化为4,循环结束。有没有一种方法可以忽略scanf中空格后的所有内容,只取整数。 输入可以是以下形式:4 abc 3 def 7 ghi您可以使用fgets从stdin获取输入字符串,然后使用sscanf从输入字符串中过滤出整数 char input[50]; int nu

我想把一个整数数组作为输入。即使有人进入一个空间或阿尔帕哈伯,我想忽略它

int i=0;
while(L--){
    scanf("%d",&arr[i++]);
}
但是如果我输入:4wtf
arr[0]
初始化为4,循环结束。有没有一种方法可以忽略scanf中空格后的所有内容,只取整数。
输入可以是以下形式:4 abc 3 def 7 ghi

您可以使用
fgets
stdin
获取输入字符串,然后使用
sscanf
从输入字符串中过滤出整数

char input[50];
int num;
fgets(input, 50, stdin);

sscanf(input, "%d %*s", &num);

%*s
在遇到整数后拒绝该字符串。

您可以使用
fgets
stdin
获取输入字符串,然后使用
sscanf
从输入字符串中过滤出整数

char input[50];
int num;
fgets(input, 50, stdin);

sscanf(input, "%d %*s", &num);
%*s
在遇到整数后拒绝该字符串。

尝试此操作

while(L--){
    scanf("%d",&arr[i++]);
    while(getchar() != '\n'); // Consumes all characters after space.
}
试试这个

while(L--){
    scanf("%d",&arr[i++]);
    while(getchar() != '\n'); // Consumes all characters after space.
}
我想是这样吗

int a;
scanf("%d %*s", &a);
printf("%d\n",a);

*
用于跳过输入,而不将其放入任何变量。

我这样认为

int a;
scanf("%d %*s", &a);
printf("%d\n",a);


*
用于跳过输入,而不将其放入任何变量。

我认为您实际上想要实现的是从随机输入中提取所有数字。我建议使用
fgets
将输入读入缓冲区,然后使用
isdigit
strtol
提取数字:

#include <stdio.h>

int main(void)
{
    char buff[255] = {0};
    fgets(buff, sizeof(buff), stdin); // read data from stdin
    char *ptr = buff;

    do {
        if(!isdigit(*ptr)) // check if current character is a digit 
            continue; // if not...
        long val = strtol(ptr, &ptr, 10); // read a number
        printf("%ld\n", val); // print it   
    } while(*ptr++); // ...move to next character
}

我认为你们实际上想要实现的是从一个随机输入中提取所有的数字。我建议使用
fgets
将输入读入缓冲区,然后使用
isdigit
strtol
提取数字:

#include <stdio.h>

int main(void)
{
    char buff[255] = {0};
    fgets(buff, sizeof(buff), stdin); // read data from stdin
    char *ptr = buff;

    do {
        if(!isdigit(*ptr)) // check if current character is a digit 
            continue; // if not...
        long val = strtol(ptr, &ptr, 10); // read a number
        printf("%ld\n", val); // print it   
    } while(*ptr++); // ...move to next character
}

使用
fgets()
strtol()
。您想按个位数取还是要整个整数?@Tahlil取整个整数。使用
fgets()
strtol()
。您想按个位数取还是要整个整数?@Tahlil取整个整数。