c - getchar() 用于从输入中排除字符
问题描述
这是我想做的事情:我的老师给了我一个任务,让我接收来自用户的输入,例如“1,2,3,4,-3,17,-9,0,5,-8,10”和用户按下回车键后,程序应忽略“,”符号并打印正数和负数(每个)的最大值和最小值。现在他说我们应该使用 getchar() 来做到这一点,但我不明白如何......我知道这个函数用于从用户那里读取单个字符(而不是用 putchar() 打印它)而不是忽略字符,所以我想了解我应该如何在while循环中使用它来执行这种操作。
所以总结一下我的问题是关于有选择地阅读输入(其他事情我会自己管理,尽管如果有人在代码中看到一些东西并且可以给出提示我会很高兴但我希望了解 getchar() 函数来做相反的事情我正在阅读它的设计目的),我已经编写并删除了数千次代码并且无法让它工作......这就是它现在的样子(它不起作用):
#include <stdio.h>
#include <stdlib.h>
int main(){
char enter = "\n";
int list_of_nums[100];
char ch1[100];
int neg_num[100];
int pos_num[100];
printf("please enter numbers separated by ',': \n");
while (getchar()!= enter) {
scanf("%d" ,&list_of_nums;
if (list_of_nums >= 0){
getchar();
pos_num.append(list_of_nums);
}
else{
neg_num.append(list_of_nums);
}
}
int max_pos = max.pos_num[];
int min_pos = min.pos_num[];
int max_neg = max.neg_num[];
int min_pos = min.neg_num[];
printf("the maximum number of all the positives is: %d \n" ,max_pos);
printf("the minimum number of all the positives is: %d \n" ,min_pos);
printf("the maximum number of all the negatives is: %d \n" ,max_neg);
printf("the minimum number of all the negatives is: %d \n" ,min_neg);
return 0;
}
解决方案
根据第一个输入选择下一个输入会发生什么。这是负数的代码。只需添加具有两位数的案例并优化它:
#include <stdio.h>
#include <stdlib.h>
#define MAX_NUMBERS 100
int main(void){
int list_of_nums[MAX_NUMBERS];
int pos_nums[MAX_NUMBERS];
int neg_nums[MAX_NUMBERS];
int size = 0, size_pos = 0, size_neg = 0, i, max_pos, min_pos, max_neg, min_neg, neg_flag = 0;
char input;
printf("Enter numbers separated by ',':\n");
do {
input = getchar();
if(input == '-') {
neg_flag = 1; //for negative numbers
input = getchar();
}
if(input >= '0' && input <= '9') {
if(neg_flag) {
list_of_nums[size] = -(input - 48); //FROM ASCII CHARACTER CODE
} else {
list_of_nums[size] = input - 48;
}
neg_flag = 0;
size++;
} else {
neg_flag = 0;
}
} while(input != '\n');
for(i = 0; i < size; i++) {
printf("%d ", list_of_nums[i]);
if(list_of_nums[i] >= 0) {
pos_nums[size_pos] = list_of_nums[i];
size_pos++;
}
else {
neg_nums[size_neg] = list_of_nums[i];
size_neg++;
};
}
printf("\n");
max_pos = pos_nums[0];
min_pos = pos_nums[0];
for(i = 1; i < size_pos; i++) {
if(max_pos < pos_nums[i]) max_pos = pos_nums[i];
if(min_pos > pos_nums[i]) min_pos = pos_nums[i];
}
max_neg = neg_nums[0];
min_neg = neg_nums[0];
for(i = 1; i < size_neg; i++) {
if(max_neg < neg_nums[i]) max_neg = neg_nums[i];
if(min_neg > neg_nums[i]) min_neg = neg_nums[i];
}
printf("The maximum number of all the positives is: %d\n", max_pos);
printf("The minimum number of all the positives is: %d\n", min_pos);
printf("The maximum number of all the negatives is: %d\n", max_neg);
printf("The minimum number of all the negatives is: %d\n", min_neg);
return 0;
}
PS 对于未来,不要发布“需要家庭作业帮助”的问题,而是尽可能地解决任务。这样你就可以提出更多研究的问题。
推荐阅读
- algorithm - 无符号除法算法中的溢出检测
- java - 如何从回收视图中停止回收视图?
- scala - ZIO 1.0.3 改变了环境的工作方式,现在 http4s Blaze 将无法运行
- php - var_dump 返回 null。登录页面给出一个空白页面
- php - FancyTree - 如何放入数据内容生成 php 目录
- java - 在不使用 Maven 的情况下将 JAXB 库包含到 JAR 文件中
- javascript - 在 node.js 中运行时未定义要求
- c# - 检查列表列表中的元素是否包含另一个列表
- python - 在 pytest.fail 调用中显示 pytest 差异
- google-cloud-platform - BigQuery 目标表在使用数据传输复制数据集后为空