#include <stdio.h>
#include <stdlib.h>
int main() {
char words[1000][100], lowercase[100];
int i, j, k, l, m, s, letternumber[100];
for (i=0; i < 1000; i++){
scanf("%s", &words[i][0]);
if (words[i][0] == '\n'){
break;
}
j=0;
while (words[i][j++] != '\0'){
letternumber[i]+=1;
}
}
for (s=0; s < i; s++){
for(m=0; m < letternumber[s]; m++){
lowercase[m]=words[s][m];
}
for (j=0; j < letternumber[s]; j++){
words[s][j] = lowercase[m-j];
}
}
for (l=0; l < n; l++){
for (k=0; k < letternumber[l]; k++){
printf("%c", words[l][k]);
}
printf("\n");
}
return 0;
}
这是我的代码,我希望第一个 for 循环在该行的第一个字符是换行符时进行,但无论输入如何,它都会继续
中断不起作用
break
工作正常。然而 words[i][0] == '\n'
永远不会是真的,因为 scanf("%s", &words[i][0])
永远不会在 '\n'
中保存 words[]
。
"%s"
中的scanf("%s", &words[i][0])
有4件事:
从'\n'
读取0个或更多
空白(包括
stdin
)并丢弃它们。继续,直到找到非空白。
读取 1 个或多个非 空白 并将它们保存到
words[i]
中。继续,直到找到空格。将空白返回到 stdin
。如果没有像 "%99s"
这样的 width,则可能会超出范围。
将
'\0'
附加到 words[i]
。
如果读取到一些非空格则返回 1,否则返回
EOF
。
使用
fgets()
要读取并保存
'\n'
,请使用 fgets()
,因为它旨在读取用户输入的行。
//scanf("%s", &words[i][0]);
if (fgets(words[i], sizeof words[i], stdin) == NULL || words[i][0] == '\n') {
break;
}
你的程序是把输入的字符串反转吧?
我对你的代码做了一些改进。 我认为有一些不必要的变量。
https://github.com/yinyangwarrior0928/soresolve-break-not-work
谢谢你。