生手又来啦,C没有字符串就是麻烦

新手又来啦,C没有字符串就是麻烦
无效输入间隔有效输入

#include<stdio.h>
int main()
{
int i,j,k;
printf("请输入至少三个整数,以字母或者空格或者回车间隔:");
scanf("%d",&i);
scanf("%d",&j);
scanf("%d",&k);
printf("输入的前三个整数是:%d %d %d\n",i,j,k);
}

如果输入是这样的:
生手又来啦,C没有字符串就是麻烦
很显然没有问题
如果输入是这样的:
生手又来啦,C没有字符串就是麻烦
很显然也没有问题
但是如果输入是这样的:生手又来啦,C没有字符串就是麻烦
很显然后两个数并没有正确输入,是随机出来的。为什么字母无法像空格和回车一样起间隔的作用?
c 新手 输入

------解决方案--------------------
没有清空缓冲区吧
------解决方案--------------------
引用:
引用:没有清空缓冲区吧亲,我关了VC6,删掉生成的文件只留下源代码,重新编译与连接算不算?

不是这个意思
你输入一个数字,之后应该输入第二个数字,但你输入了字母,字母在缓冲区中没法正确输出,滞留下来。
之后你输入数字,但不会正确处理
------解决方案--------------------
scanf是一个很大的学问  楼主慢慢研究 生手又来啦,C没有字符串就是麻烦
------解决方案--------------------
我觉得是你输入格式是%d,而你输入字符的原因吧
------解决方案--------------------
用%d是不能输入字符的,第二个scanf()函数是不能读到第二个数字。
------解决方案--------------------
生手又来啦,C没有字符串就是麻烦
------解决方案--------------------
按照你的输入可以这样写:
scanf("%dg%dg%d" ,&i,&j,&k);
------解决方案--------------------

#include<stdio.h>
int main()
{
    int i,j,k;
    printf("请输入至少三个整数,以字母或者空格或者回车间隔:");
    //修改如下
    //scanf("%d",&i);
    //scanf("%d",&j);
    //scanf("%d",&k);
    scanf("%d%d%d",&i,&j,&k);//这样比较清楚,你的规则只能是空格,tab键或回车键将各个数据隔开
    //如果用字母隔开,无法识别,默认把前面输入的值给第一个,后面两个没有赋值 
    printf("输入的前三个整数是:%d %d %d\n",i,j,k);
}

------解决方案--------------------
有些不清楚 去看下源码,自身的猜测只能浪费时间,这个对初学者的建议
------解决方案--------------------
读完34之后,stream始终停留在第一g这里(应为没有对应的语句提取它),后面两个scanf始终是调用失败的(可以通过检查返回值知道)。
这不是C有没有字符串的问题,是“流”这个概念的问题。

------解决方案--------------------
仅供参考
#include <stdio.h>
char s[]="123 ab 4";
char *p;
int v,n,k;
void main() {
    p=s;
    while (1) {
        k=sscanf(p,"%d%n",&v,&n);
        printf("k,v,n=%d,%d,%d\n",k,v,n);
        if (1==k) {
            p+=n;
        } else if (0==k) {
            printf("skip char[%c]\n",p[0]);
            p++;