生手又来啦,C没有字符串就是麻烦
新手又来啦,C没有字符串就是麻烦
无效输入间隔有效输入
如果输入是这样的:

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

很显然也没有问题
但是如果输入是这样的:
很显然后两个数并没有正确输入,是随机出来的。为什么字母无法像空格和回车一样起间隔的作用?
------解决方案--------------------
没有清空缓冲区吧
------解决方案--------------------
不是这个意思
你输入一个数字,之后应该输入第二个数字,但你输入了字母,字母在缓冲区中没法正确输出,滞留下来。
之后你输入数字,但不会正确处理
------解决方案--------------------
scanf是一个很大的学问 楼主慢慢研究
------解决方案--------------------
我觉得是你输入格式是%d,而你输入字符的原因吧
------解决方案--------------------
用%d是不能输入字符的,第二个scanf()函数是不能读到第二个数字。
------解决方案--------------------

------解决方案--------------------
按照你的输入可以这样写:
scanf("%dg%dg%d" ,&i,&j,&k);
------解决方案--------------------
------解决方案--------------------
有些不清楚 去看下源码,自身的猜测只能浪费时间,这个对初学者的建议
------解决方案--------------------
读完34之后,stream始终停留在第一g这里(应为没有对应的语句提取它),后面两个scanf始终是调用失败的(可以通过检查返回值知道)。
这不是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
新手
输入
------解决方案--------------------
没有清空缓冲区吧
------解决方案--------------------
不是这个意思
你输入一个数字,之后应该输入第二个数字,但你输入了字母,字母在缓冲区中没法正确输出,滞留下来。
之后你输入数字,但不会正确处理
------解决方案--------------------
scanf是一个很大的学问 楼主慢慢研究
------解决方案--------------------
我觉得是你输入格式是%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++;