新手又来啦,C没有字符串就是麻烦无效输入间隔有效输入很显然没有问题如果输入是这样的:很显然也没有问题但
新手又来啦,C没有字符串就是麻烦
无效输入间隔有效输入
很显然没有问题
如果输入是这样的:

很显然也没有问题
但是如果输入是这样的:

很显然后两个数并没有正确输入,是随机出来的。为什么字母无法像空格和回车一样起间隔的作用?
[解决办法]我觉得是你输入格式是%d,而你输入字符的原因吧
[解决办法]用%d是不能输入字符的,第二个scanf()函数是不能读到第二个数字。
[解决办法]
[解决办法]按照你的输入可以这样写:
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++;
} else {//EOF==k
break;
}
}
printf("End.\n");
}
//k,v,n=1,123,3
//k,v,n=0,123,3
//skip char[ ]
//k,v,n=0,123,3
//skip char[a]
//k,v,n=0,123,3
//skip char[b]
//k,v,n=1,4,2
//k,v,n=-1,4,2
//End.
[解决办法]+1 慎用
[解决办法]。
[解决办法]+1 对头 说到点子上了 这个是流的概念的问题 楼主基础知识 概念 缺失太多
[解决办法]把scanf的文档反复的看。
[解决办法]+1
[解决办法]正解
scanf是个很强大的函数,LZ使用的时候仔细看下scanf的使用说明