所以我详细说明了标题 -
我宣布了一些函数,然后在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个以上的函数,并且每个函数都有行限制。因此,我似乎不得不以这样或那样的方式面对这个问题。
话虽如此,如果您能想到维持这些功能的不同解决方案,那么它可能是相关的。
到目前为止,非常感谢你们所有的帮助!
答案 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_word
和count_word
的地方调用它们。
当然,您不仅可以支持可以分解为阶梯函数的函数。无法支持需要回顾的功能。