【发布时间】:2019-11-16 15:38:42
【问题描述】:
我很困惑,因为我刚刚花了一些时间来调试我的程序,最终可以通过将我的 while 循环换成 for 循环来适应它。以下代码可以正常工作并输出我输入的单词:
int status = 1;
int *ptrStatus = &status;
int no_words;
int random;
char *selected;
printf("Enter the no of words you want to enter.\n");
scanf("%d", &no_words);
// Input the words
char *words[no_words];
char word[32];
int length;
char *pointerWord;
for (int i = 0; i<no_words; i++) {
printf("Enter word number %d: ", i);
scanf("%s", word);
length = strlen(word);
for ( int i = 0; i<length; i++) {
word[i] = tolower(word[i]);
}
pointerWord = (char*)malloc(length+1);
strcpy(pointerWord, word);
words[i] = pointerWord;
}
// Print word list
printf("You entered:\n");
for (int i = 0; i<no_words; i++) {
printf("%s\n", words[i]);
}
然而,这段代码(相同,但有一个 while 而不是 for 循环)输出随机字符:
int status = 1;
int *ptrStatus = &status;
int no_words;
int random;
char *selected;
// Get number of words
printf("Enter the no of words you want to enter.\n");
scanf("%d", &no_words);
// Input the words
char *words[no_words];
char word[32];
int length;
char *pointerWord;
for (int i = 0; i<no_words; i++) {
printf("Enter word number %d: ", i);
scanf("%s", word);
length = strlen(word);
// Why doesn´t this work??
while(i < length) {
word[i] = tolower(word[i]);
printf("i = %d, length = %d and word[i] = %c\n", i, length, word[i]);
i++;
}
pointerWord = (char*)malloc(length+1);
strcpy(pointerWord, word);
words[i] = pointerWord;
}
// Print word list
printf("You entered:\n");
for (int i = 0; i<no_words; i++) {
printf("%s\n", words[i]);
}
例如,当我输入“Hello”时,输出是 @?>???M???H??H?}?H?
有人知道为什么吗?
【问题讨论】:
-
确定要在那里使用
i?
标签: c for-loop while-loop