【发布时间】:2021-12-31 21:34:58
【问题描述】:
#include <stdio.h>
#include <string.h>
int main(){
char c[20], result[50];
int bool = 0, count = 0, i;
while(fgets(c,20,stdin) != NULL){
int stringSize = strlen(c);
if(stringSize == 11){
int ascii = (int)(c[i]);
for(i = 0; i < stringSize; i++){
if(ascii >= 'A' && ascii <= 'Z'){
bool = 1;
}
}
}
}
if(bool == 1){
count++;
strcat(result,c);
}
printf("%d", count);
printf("%s",result);
}
早上好,我是编程新手,我已经花了很长时间在谷歌上搜索和搜索这个问题,但我似乎无法理解它。 基本上我试图过滤一个 fgets 以便它读取每个字符串,如果它们是大写字母,它们是“有效的”。但是,我什至无法让 fgets 停止接受更多输入。
编辑:想法是在结果中存储每个有 10 个大写字母的字符串,并且一旦用户没有输入 ('\0'),fgets while 循环就会中断
【问题讨论】:
-
您是否尝试过输入 Ctrl-D (Linux) 或 Ctrl-Z (Windows)?还是在符合要求时接受一个输入字符串的想法?
-
int ascii = (int)(c[i]);使用未初始化的i。看起来这个语句应该在循环中,而不是之前。 -
如果想法是只接受一个全大写的字符串,则需要在每个
fgets循环开始时重置标志(不在循环外)。然后,如果任何字符不是大写,则设置标志。但问题陈述不清楚 - 请显示示例输入和所需输出。 -
我编辑的意图,我的错,应该更清楚。只要有输入,我基本上希望它运行,并且结果只存储包含 10 个大写字母的字符串。
-
与问题无关,但这是个坏主意:
int bool = 0。stdbool.h中有一个类型bool,一旦你需要它用于其他目的,你的代码就会中断。即使您尚未包含相关标头,也不应使用 C 标准定义的标识符。
标签: c while-loop c-strings fgets strcat