【发布时间】:2020-11-29 17:14:20
【问题描述】:
我在 Win10 上,目前正在学习 C,对于一个简单的练习,我很不理解我的输出 (EKEKEKEKE),该练习要求输入并将相同的字符串作为输出而不带元音。
inputBLABLABLA
EKEKEKE
outputB.L.B.L.B.L.
inputBLABLABLA
outputK.K.K.
int main()
{
for (int i = 0; i < 2; i = i + 1)
{
printf("input");
char titre[101] = {0};
scanf("%[^\n]\n", titre);
int j = 0;
char t = titre[0];
printf("output");
while ((t != '\0') && (j < 101))
{
if ((t != 'A')
&& (t != 'E')
&& (t != 'I')
&& (t != 'O')
&& (t != 'U')
&& (t != 'Y')
&& (t != ' '))
{
printf("%c.", t);
}
j = j + 1;
t = titre[j];
}
if (i == 0)
{
printf("\n");
}
}
}
【问题讨论】:
-
我从不使用带有尾随空格规范的
scanf,所以我无法解释为什么它行为不端,但如果你将其更改为scanf(" %[^\n]", titre);,那应该会更好。注意%前面的空格,它过滤了输入缓冲区中留下的任何先前的换行符、空格等。 -
您根本不应该使用
scanf(请参阅stackoverflow.com/questions/58403537/… 和stackoverflow.com/questions/15664664/scanf-regex-c/… 了解原因)。使用fgets(或getline,如果可用)一次读取用户输入一行。