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

8 浏览
0 Comments

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

我想将一个整数数组作为输入。即使有人输入了一个空格或一个字母,我也希望忽略它。

int i = 0;
while(L--){
    scanf("%d", &arr[i++]);
}

但如果我输入:4 wtfarr[0]被初始化为4并且循环结束。有没有办法在scanf中忽略空格后的所有内容,只取整数。

输入可以是这种形式:4 abc 3 def 7 ghi

0
0 Comments

忽略除整数以外的所有内容,使用scanf出现的问题是无法过滤掉输入字符串中的其他内容。解决方法是使用fgets从stdin中获取输入字符串,然后使用sscanf从输入字符串中过滤出整数。具体代码如下:

char input[50];
int num;
fgets(input, 50, stdin);
sscanf(input, "%d %*s", &num);

其中,%*s表示在遇到整数后拒绝字符串。

0
0 Comments

忽略除整数外的所有内容scanf的问题出现的原因是:在上述代码中,使用了scanf函数来读取整数,但是在读取整数之后,使用了一个while循环来消耗掉输入缓冲区中的所有字符,包括换行符。这样做的目的是为了防止在下一次循环中读取到上一次输入的换行符。然而,这种做法可能会导致一些问题。

解决这个问题的方法是:在使用scanf函数读取整数之后,可以使用getchar函数来读取并丢弃输入缓冲区中的换行符。这样可以确保在下一次循环中,不会读取到上一次输入的换行符。修改后的代码如下所示:

while(L--){
    scanf("%d",&arr[i++]);
    getchar(); // Discards the newline character.
}

通过这样的修改,可以保证在每次循环中,只读取到整数而忽略其他内容。这样可以避免在使用scanf函数读取整数时可能出现的问题。

0
0 Comments

在上面的代码中,使用了scanf函数来获取输入的整数,并使用%d格式进行匹配。然而,在格式字符串中还包含了%*s,这是用来跳过输入而不将其存储到任何变量中的。这样,只会将整数部分存储到变量a中,并通过printf函数将其输出。

这个问题的出现是因为在scanf函数中使用了%*s格式,该格式会跳过输入的字符串部分。这意味着如果我们输入的字符串中包含空格或其他非数字字符,scanf函数将会停止匹配并将剩余部分舍弃。因此,即使我们在输入中包含了"wwwww",最终输出的结果仍然是11。

要解决这个问题,我们需要修改格式字符串,以便只匹配整数部分而忽略其他部分。可以使用以下代码来实现:

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

这样,我们只需要输入一个整数,而不需要输入任何其他字符。scanf函数将会正确地将整数部分存储到变量a中,并通过printf函数将其输出。

,这个问题的原因是在scanf函数的格式字符串中使用了%*s格式,导致只匹配整数部分并忽略其他部分。解决方法是修改格式字符串,只匹配整数部分而忽略其他部分。这样可以确保只获取到我们想要的整数,并正确地将其存储和输出。

0