coolzf 发表于 2015-7-29 18:42:41

这个不错

曲奇 发表于 2015-9-3 08:35:21

鱼币又不够了:ton:

白文龙 发表于 2015-10-10 09:23:08

不是很理解

lzjzeei 发表于 2015-10-22 23:00:49

第四讲 从另一个小程序接着说(课件+源代码) 第四讲 从另一个小程序接着说(课件+源代码) 第四讲 从另一个小程序接着说(课件+源代码)

晏策123 发表于 2015-12-13 21:38:46

力学如力耕,勤惰尔自知。但使书种多,会有岁稔时。

tzzyw 发表于 2015-12-22 21:14:59

这只是一个开始

niliuhe 发表于 2016-1-6 23:49:37

看看。。。

15538386368 发表于 2016-5-16 19:34:27

谢谢

jdp7385 发表于 2016-11-5 08:43:28

呵呵呵呵

thy405933 发表于 2016-11-17 16:57:32

{:5_92:}

fisheryao 发表于 2017-10-30 18:05:52

非常感谢!!!!

leibniz 发表于 2017-11-16 05:00:01

试试下载 看看

fisheryao 发表于 2017-12-4 10:24:08

好资料

liliangzi 发表于 2019-1-8 18:26:41

fidh

fszhyong 发表于 2019-3-4 21:39:30


这个不错嘛

Hannibal_Chen 发表于 2019-4-30 22:53:25

我用的是visual studio 2019 community    ,这一课讲的哪个程序,我照着打了一遍,有ungetc(ch, stdin);这句代码,但是还是会被吃掉一个数字,这是什么问题啊??

CivicTesla 发表于 2019-8-30 22:35:49

鱼币怎么赚啊。。。。。。。

MUYIXUE 发表于 2024-7-2 21:51:41

发一个我自己的实现,感觉比作者的好,可以处理没有任何输入的情况.
#include <stdio.h>

int addUserInput();
char letterToNumber(char last_letter, int* value, bool counter_to_zero);
int pow(int down, int up);

int main() {
    int sum = addUserInput();
    printf("%d", sum);
    return 0;
}

int addUserInput() {
    int sum = 0;//所有的总值
    bool need_preread = true;
    bool end_for = false;
    char preread = ' ';
    int value = 0;
    for (;;) {
      if (need_preread) {
            preread = getchar();//在这里获取预读取值
      }
      else {
            need_preread = true;
      }
      switch (preread) {
      case ' ':
            while ((preread = getchar()) == ' ');
            need_preread = false;
            break;
      case '\n':
            end_for = true;
            break;
      default:
            preread = letterToNumber(preread, &value, true);
            sum += value;
            need_preread = false;
            if (preread == '\n') {
                end_for = true;
            }
            break;
      }
      if (end_for) {
            break;
      }
    }
    return sum;
}

char letterToNumber(char last_letter, int* value, bool counter_to_zero) {
    char current_letter = getchar();
    static int counter = 0;//当遇到空白字符时开始counter的增加,每次解开一层递归就计数器加1
    if (counter_to_zero) {
      counter = 0;
      counter_to_zero = false;
    }
    static char flag = 'N';//返回N表示没有遇到空字符
    if (current_letter >= '0' && current_letter <= '9') {//如果当前的字符为数字字符就继续执行letter_to_number
      letterToNumber(current_letter, value, counter_to_zero);
    }
    else {
      flag = current_letter;
    }
    *value += (last_letter - '0') * pow(10, counter);
    counter++;
    return flag;
}

int pow(int down, int up) {
    if (up == 0) {
      return 1;
    }
    else {
      int sum = 1;
      for (int i = 0; i < up; i++) {
            sum *= down;
      }
      return sum;
    }
}
页: 1 2 3 4 [5]
查看完整版本: 第三讲 从一个小程序说起(2)(课件+源代码)