标题:书上说 while (getchar() != '\n') continue;可以丢弃sc ...
只看楼主
zts的爱
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2016-7-18
结帖率:85.71%
已结贴  问题点数:10 回复次数:15 
书上说 while (getchar() != '\n') continue;可以丢弃scanf后的所有字符,但为什么能够丢
/* showchar2.c -- prints characters in rows and columns */
#include <stdio.h>
void display(char cr, int lines, int width);
int main(void)
{
    int ch;             /* character to be printed      */
    int rows, cols;     /* number of rows and columns   */
   
    printf("Enter a character and two integers:\n");
    while ((ch = getchar()) != '\n')
    {
        if (scanf("%d %d",&rows, &cols) != 2)
            break;
        display(ch, rows, cols);
        while (getchar() !=  '\n')
            continue;
        printf("Enter another character and two integers;\n");
        printf("Enter a newline to quit.\n");
    }
    printf("Bye.\n");
   
    return 0;
}

void display(char cr, int lines, int width)
{
    int row, col;
   
    for (row = 1; row <= lines; row++)
    {
        for (col = 1; col <= width; col++)
            putchar(cr);
        putchar('\n');  /* end line and start a new one */
    }
}
搜索更多相关主题的帖子: character include continue display printed 
2016-07-24 22:48
zts的爱
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2016-7-18
得分:0 
为什么能够丢弃呢?本人不是太懂,思考不出来,希望有朋友可以帮解答一下。
2016-07-24 22:48
晓益
Rank: 4
来 自:江苏扬州
等 级:业余侠客
威 望:2
帖 子:85
专家分:220
注 册:2016-7-9
得分:4 
回复 2楼 zts的爱
当你的输入缓存区有太多字符,而你的程序只需要 for (row = 1; row <= lines; row++) 个字符 那么缓存区中多余的怎么办呢?

while (getchar() !=  '\n')  //它的功能就是将缓存区中所有剩下的字符,都给读取完,直到'\n'止
   continue;      

千里之行,始于足下。
思考问题伤细胞,得分不容易。解决完问题请尽快结贴
2016-07-24 22:55
zts的爱
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2016-7-18
得分:0 
回复 3楼 晓益
读取的意思是只是从缓冲区接受,直到出现'\n'退出循环吗?还有个问题为什么我的vc6不支持bool_类型呢?
2016-07-24 23:00
晓益
Rank: 4
来 自:江苏扬州
等 级:业余侠客
威 望:2
帖 子:85
专家分:220
注 册:2016-7-9
得分:0 
回复 4楼 zts的爱
我们从键盘上输入的所有字符,都是在缓存区中的,之后再从缓存区中利用输入函数读取字符(如putchar)

至于你说的不支持,应该是和你的编译器,不是支持最新的C标准有关系吧,我也不是很懂,因为我的也不支持<stdbool.h>头文件。

[此贴子已经被作者于2016-7-24 23:12编辑过]


千里之行,始于足下。
思考问题伤细胞,得分不容易。解决完问题请尽快结贴
2016-07-24 23:05
zts的爱
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2016-7-18
得分:0 
程序代码:
long get_long(void)
{
    long input;
    char ch;
    
    while (scanf("%ld", &input) != 1)
    {
        while ((ch = getchar()) != '\n')
            putchar(ch);  // dispose of bad input
        printf(" is not an integer.\nPlease enter an ");
        printf("integer value, such as 25, -178, or 3: ");
    }


按照你说的,这个程序如果我输入3 456的话,scanf应该接受3,那应该输出 456,但为什么没有,明明有putchar(ch),运行却无法输出 456,麻烦讲解下,谢谢
2016-07-24 23:13
晓益
Rank: 4
来 自:江苏扬州
等 级:业余侠客
威 望:2
帖 子:85
专家分:220
注 册:2016-7-9
得分:0 
回复 4楼 zts的爱
虽然我也不会,但是我知道头文件是可以自己编写的,如果有一天你觉得自己可以了,你也可以自己编写一个<stdbool.h>,我想这应该是行的通的。
如果你实在是觉得不好用,就去问问真真的大神,给你推荐一个好的编译器吧。

千里之行,始于足下。
思考问题伤细胞,得分不容易。解决完问题请尽快结贴
2016-07-24 23:16
zhangqiwhut
Rank: 2
等 级:论坛游民
帖 子:7
专家分:25
注 册:2015-3-20
得分:4 
回复 6楼 zts的爱
你输入3,然后大while()里面的scanf不就等于1跳出循环了吗
2016-07-24 23:21
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
得分:4 
while(scanf("%ld", &input) != 1)这个条件都不成立,你想它运算什么
2016-07-24 23:24
晓益
Rank: 4
来 自:江苏扬州
等 级:业余侠客
威 望:2
帖 子:85
专家分:220
注 册:2016-7-9
得分:0 
回复 6楼 zts的爱
同意楼上的说法,如果你是要验证想法的话可以改一改

long get_long(void)
{
    long input;
    char ch;
   
    while (scanf("%ld", &input) )
    {
        while ((ch = getchar()) != '\n')
            putchar(ch);  // dispose of bad input
        putchar('\n')
        printf(" is not an integer.\nPlease enter an ");
        printf("integer value, such as 25, -178, or 3: ");
    }



你在输入:3 456       试试

千里之行,始于足下。
思考问题伤细胞,得分不容易。解决完问题请尽快结贴
2016-07-24 23:26



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-467199-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.144948 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved