0863-输出出现过的大写字母

我这样写第二次出现的大写字母会重复,而且不知道为什么输出还有从A到Z的所有大写字母
#include<stdio.h>
int main()
{
char str[100];
int n,i;
gets(str);
for(i=0;;i++){
if(str[i]>='A'&&str[i]<='Z'){
printf("%c ",str[i]);
}
}
printf("\n");
return 0;
}
以下为题目

问题描述
输入一行字符(不超过100个字符),按次序输出出现过的大写字母。
输入
输入一行字符串(不超过100字符)。
输出
将结果输出到一行中,每个字母后面带一个空格。
输入样列
FONTNAME and FILENAME
输出样例
F O N T A M E I L
出处
ymc

你这问题有点没看懂

循环为什么没条件

for (i = 0; i < sizeof(str); i++) 

给for加上循环条件str[i]!='\0'

你这for循环是个死循环没发现吗,你要给他一个退出条件。
帮你改了一下

#include <stdio.h>
int main() {
    char str[100];
    int n, i;
    gets(str);
    int sizeStr = sizeof(str);
    for (i = 0; i < sizeStr; i++) {
        if (str[i] >= 'A' && str[i] <= 'Z') {
            printf("%c ", str[i]);
        }
    }
    printf("\n");
    return 0;
}