现在的位置: 首页 > 11 文件处理 > 基础课程 > 正文

scanf 和它的兄弟

2011年05月03日 11 文件处理, 基础课程 ⁄ 共 2167字 ⁄ 字号 暂无评论
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <stdio.h>
 
int main(int argc, char *argv[])
{
    int a, b,result;
    char op;
 
    scanf("%d%c%d", &a,&op,&b);
    switch(op) {
    case '+':
        result =a+b;
        break;
    case '-':
        result =a-b;
        break;
    case '*':
        result =a*b;
        break;
    case '/':
        result =a/b;
        break;
    case '%':
        result =a%b;
        break;
    default:
        break;
    }
    printf("%d\n", result);
 
    return 0;
}

这段程序的变化是把 scanf 放到了 while 中,作为循环的判断条件, 然后把其他部分放到了 循环体 { }

如果 scanf 没有读到这三个数,会返回 EOF,表示未能成功读取。

还记得经典的【文件复制】(《C程序设计语言 第二版新版》第11页)吗? 是不是有点像?

1
2
3
4
5
3+4
15/6
17%4
9-6
9*7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <stdio.h>
 
int main(int argc, char *argv[])
{
    int a, b,result;
    char op;
 
    while (scanf("%d%c%d", &a,&op,&b)!=EOF) {
        switch(op) {
        case '+':
            result =a+b;
            break;
        case '-':
            result =a-b;
            break;
        case '*':
            result =a*b;
            break;
        case '/':
            result =a/b;
            break;
        case '%':
            result =a%b;
            break;
        default:
            break;
        }
        printf("%d\n", result);
    }
 
    return 0;
}

scanf 会返回正确读取的数据个数,在这个例子中,应该正确读取 a, op 和 b

如果你编写的程序有问题,每次编译后都要输入这些测试数据,岂不是很麻烦?

现在就轮到 scanf 的师兄 fscanf 出场了

抱歉!评论已关闭.