首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

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

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


很显然没有问题
如果输入是这样的:
生手又来啦,C没有字符串就是麻烦
很显然也没有问题
但是如果输入是这样的:生手又来啦,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++;


        } 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.


[解决办法]
引用:
scanf是一个很大的学问  楼主慢慢研究


+1 慎用
[解决办法]
引用:
引用:引用:引用:没有清空缓冲区吧亲,我关了VC6,删掉生成的文件只留下源代码,重新编译与连接算不算?
不是这个意思
你输入一个数字,之后应该输入第二个数字,但你输入了字母,字母在缓冲区中没法正确输出,滞留下来。
之后你输入数字,但不会正确处理第一和第二……


[解决办法]
引用:
读完34之后,stream始终停留在第一g这里(应为没有对应的语句提取它),后面两个scanf始终是调用失败的(可以通过检查返回值知道)。
这不是C有没有字符串的问题,是“流”这个概念的问题。
+1 对头 说到点子上了 这个是流的概念的问题 楼主基础知识 概念 缺失太多 
[解决办法]
把scanf的文档反复的看。

[解决办法]
引用:
有些不清楚 去看下源码,自身的猜测只能浪费时间,这个对初学者的建议

+1
[解决办法]
引用:
按照你的输入可以这样写:
scanf("%dg%dg%d" ,&amp;i,&amp;j,&amp;k);

正解

scanf是个很强大的函数,LZ使用的时候仔细看下scanf的使用说明

热点排行