gcc中scanf的使用及返回值问题

xiaoxiao2021-02-28  52

今天在实现输入一组数字,以空格为间隔时对scanf的功能及返回值产生了疑问,所以自己实验了一下,现分享下实验结果

int main(){ int k, v; k = scanf("%d", &v); printf("k = %d\n", k); printf("v = %d\n", v); }

直接输入空格、回车都不会从scanf中返回(不知道还有没有其他符号有相同情况),会继续等待输入,而输入数字时k = 1;输入字母等字符时k = 0,且v值无变化。

那么当输入不匹配时,缓冲区里的数据是否丢弃了呢?

int main(){ int i, k, v; i = 0; while(i < 2){ k = scanf("%d", &v); printf("k = %d\n", k); printf("v = %d\n", v); i++; } }

实验发现,不匹配的字符不会从缓冲区丢弃,而会继续匹配下一次输入。若想跳过缓冲区的字符,可以用scanf("%*c")匹配。

补充代码:输入一串数字,以空格(数量任意)间隔,可以过滤其他字符。

int main(){ int i, n, k, v, a[MAX]; char c; i = 0; while(1){ k = scanf("%d", &v); c = getchar(); if(k == 1){ a[i] = v; i ++; } else if(k == 0){ scanf("%*c"); } if(c == '\n'){ break; } } n = i; for(i = 0; i < n; i++){ printf("%d ",a[i]); } }
转载请注明原文地址: https://www.6miu.com/read-52136.html

最新回复(0)