CAndPrimer_13

关于数字 字符串的连续输入问题 笔记

  • Dargon

  • 2020/11/01

  • 所遇到的的重要的问题

  • 教科书 来自:《C And Primer》第十四章

一直困扰我的问题while 和scanf 的一些操作

主要问题是 程序可以写好 当你将进行测试的时候,从键盘输入的时候 输入的方法不正确 要义ctrl +z来代表一次输入结束

对于使用scanf 函数进行连续输入数字 或者 字符的时候

1. while (scanf("%d", &n) ==1)

赋值失败,跳出循环,什么时候会赋值失败?
当你用键盘输入1 space 2 space 时候,相当于你输入一个到缓冲区 之后scanf 进行读取,读取成功就返回1 按下enter 键之后 还是照样会返回1 ,只有 当且 only just 输入ctrl + z(文件结束符)时候 在按enter 之后才会读取错误 返回EOF 而不再是 1 while 结束.

正确的输入 应当输入一次 按下一次enter,代表本次结束。(前面的是因为自己在加上了if 限制 输入space 只读了 数字进来)


while( scanf ("%d", &i) ==1 ) {
        if( i>=0 && i <size) {
            array[i] ++;
        }
    }

2. while (scanf("%d", &n) !=EOF)

读到文件结尾时循环结束
ctrl +z
就是相当于输入了 EOF

while( scanf ("%d", &i) !=EOF ) {
        if( i>=0 && i <size) {
            array[i] ++;
        }
    }

3. while (scanf("%d", &n) ,n)

此时 括号里面的conditions 是逗号表达式 例如 x =(5, 6) 就相当于 x=6;
此时就相当于 判断n 的值的大小
也就是当你输入 0 的时候就会结束while
键盘输入的话 就不需要ctrl +z 来结束输入了,只有输入0 enter之后,就结束了

//这个是 当输入 -1 的时候,while 结束
while( scanf ("%d", &i), (i !=-1) ) {
        if( i>=0 && i <size) {
            array[i] ++;
        }
    }

当输入char 类型字符的时候

### 记一次坑逼的问题

  • gets()函数的问题
    while( gets(input) != NULL )
    
    经过测试自己的编译器,即使输入完成之后,按下enter之后,gets()还是不会反悔NULL指针,貌似和官方介绍的不一样啊!
    官方介绍 char *gets(char *string)
    gets() 函数从流中读取字符串,直到遇到换行符或文件结尾为止,最后加上NULL作为字符串结束,所读取的字符串暂存在给定的参数string中
    返回值 若成功返回string指针,否则返回NULL

1. 利用gets() 函数

使用方法

char input[MAX_INPUT];
while( gets(input) != NULL ) {
  printf("The Original Input : %s\n",input);
}

Note: 输入完成一串字符串之后,要在键盘上面输入 Ctrl + z 按下 Enter 来结束这次的输入,才能打印出来。

2. 利用getchar()函数

使用方法
进行单个字符的输入,

while( (ch =getchar()) !=EOF ) {
        total ++;
        for(category =0; category <N_CATEGORIES; category++) {
            if( test_func[category] (ch) )
                count[category] ++;
        }
    }

进行对单个 输入字符的操作, 连续输入结束之后 Ctrl +z(作为文件的结束符号) 来结尾,按下Enter 键结束while 循环

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值