是否可以提示在多个scanf函数中使用单个用户输入?

时间:2017-08-22 01:11:25

标签: c function input scanf

所以我详细说明了标题 -

我宣布了一些函数,然后在main中调用它们。 所有函数都使用scanf,并且应该对相同的输入执行操作。

我的问题是我提示为每个函数(每个scanf)提供一个输入,但我想要一个提示。考虑到所有函数使用相同的输入,我认为它是直截了当的。

这里有一个很大的收获 - 我的输入保证是一系列字母(即一个字 - 就像'你好'),我不能使用任何类型的字符串,数组或指针。

我在任何地方都没有发现任何事情。可以这样做吗?

编辑 - 示例代码:

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

/*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^
functions - all the functions we later call for in 'main'
*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*/

//*^*^*^*^*^*^* function 1 (find sum of letter values)
int word_sum() {
    char letter = '\0';
    int sum = 0;
    while (letter != '.') {
        sum += (int)letter;
        scanf("%c", &letter);
    }
    return sum;
}

//*^*^*^*^*^*^* function 2 (number of letters in input)
int char_count() {
    char letter = '\0';
    int i = 0;
    for (i = 0; letter != '.'; i++) {
        scanf("%c", &letter);
    }
    return i - 1;
}
//*^*^*^*^*^*^* function 3 (does something with same input)
//more functions

/*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^
main
*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*/
int main() {
    printf("Enter word:\n");

    printf("the sum is %d\nchar num is %d\a", word_sum(), char_count());

    return(0);
}

/* ===================
input = hi.

desired output -
--------------------------
Enter word:
hi.

the sum is 209
char num is 2
--------------------------
current output - 
--------------------------
Enter word:
hi.
hi.
the sum is 219
char num is 2
--------------------------
=====================*/

我使用&#39;。&#39;在输入结束时,因为我们保证所有输入都将以它结束。

如图所示,我无法使用单个提示来初始化这两个功能。

我不仅需要输入两次单词,而且(我猜测)因为它还会读取新行&#39;或某事,甚至功能结果都会出现偏差。

我知道这可以通过单个函数和scanf完成。 但是我稍后会有至少5个以上的函数,并且每个函数都有行限制。因此,我似乎不得不以这样或那样的方式面对这个问题。

话虽如此,如果您能想到维持这些功能的不同解决方案,那么它可能是相关的。

到目前为止,非常感谢你们所有的帮助!

1 个答案:

答案 0 :(得分:0)

你需要做的是将你的实际功能分解为步骤函数,它将对单个字符执行一个计算步骤 -

int sum_word(char letter, int previous_sum) {
    return letter + previous_sum;
}

int count_word(char letter, int previous_count) {
    return previous_count + 1;
}

现在您需要逐个字符地阅读并将每个步骤处理为

void process_input(void) {
    char c;
    sum=0, count=0;
    while(scanf("%c", &c) == 1 && c != '\n'){
        sum = sum_word(c, sum);
        count = count_word(c, count);
    }
    printf ("Sum = %d, Count = %d\n", sum, count);
}

如果您不想每次传递它们,也可以使用全局/静态变量进行求和和计数。

现在无论你想做什么其他操作,只需为它们制作类似的单字母处理函数,并在我调用sum_wordcount_word的地方调用它们。

当然,您不仅可以支持可以分解为阶梯函数的函数。无法支持需要回顾的功能。