【发布时间】:2016-04-05 14:04:05
【问题描述】:
这条指令有什么作用? while 循环中使用分号有什么用?
while (scanf("%s", &s[strlen(s)]) == 1);
我正在开发一个程序来检查字符串是否是 panagram。 完整代码如下:
int main() {
char s[100];
while (scanf("%s", &s[strlen(s)]) == 1);
char big[26] = {0};
char small[26] = {0};
for (int i = 0; i < strlen(s); i++) {
if (s[i] >= 'a' && s[i] <= 'z') {
small[s[i] - 'a'] = 1;
}
else if (s[i] >= 'A' && s[i] <= 'Z') {
big[s[i] - 'A'] = 1;
}
}
for (int i = 0; i < 26; i++) {
if (!(big[i] == 1 || small[i] == 1)) {
printf("not pangram");
return 0;
}
}
printf("pangram");
return 0;
}
【问题讨论】:
-
s的大小是多少?只是问... -
@SouravGhosh 我已将数组声明为 char s[100];
-
请读一本C书。你要求我们辅导你。
-
这比仅仅覆盖空终止符要糟糕得多。代码说“将整个字符串存储在字符号 strlen(s) 的地址”。它不仅会破坏空终止符并因此在循环的下一圈崩溃并烧毁,而且它也可能会越界。
-
@GayathriRavi 如果这是您的更新,此代码将调用 UB。
s必须在进入该 while 循环之前终止。不是。
标签: c while-loop scanf