Scanf 在常量字符数组 - C 中不超过 4 个字符



我有一个非常奇怪的错误。如果我写的名称包含超过 4 个字符,printf 将只输出前 4 个字符。

重要说明:我不允许使用stdio.h 以外的任何其他库,也不允许使用scanf 以外的任何库进行输入和 printf 进行输出。此外,我不允许修改函数的参数列表,我必须使用const char。该代码在 unix 系统上通过 ssh 在 putty 上运行。

我的代码和输入/输出如下。此外,while 循环也有一个错误 ._。

#include <stdio.h>
int searchCharacters(const char*, char);
int getLength(const char*);
int main() {
char yesNo;
int end = 0;
const char name[] = {""};
printf("please enter a name: ");
scanf("%s", name);
int length = getLength(name);
printf("n%s has a length of %i", name, length);
fflush(stdin);
while(end != 1) {
printf("nnWould you like to search a character in %s (y / n)?", name);
scanf(" %c", &yesNo);
switch(yesNo) {
case 'y':
printf("nPlease enter a character: ");
char searchingCharacter;
scanf("%c", &searchingCharacter);
int numberOfCharacters = searchCharacter(name, searchingCharacter);
printf("nThe letter %c is %i-times", searchingCharacter, numberOfCharacters);
break;
case 'n':
printf("nGood bye!");
end++;
break;
}
}
return 0;
}
int searchCharacter(const char s[], char c) {
int numberOfIterations = getLength(s);
int numberOfCharacters = 0;
int i;
for (int i = 0; i < numberOfIterations; i++) {
if (s[i] == c) {
numberOfCharacters++;
}
}
return numberOfCharacters;
}
int getLength(const char s[]) {
int i = 0;
while(s[i++]);
return (i - 1);
}
Input/Output:
please enter a name: abcdefg
abcd has a length of 7 characters.
Would you like to search a character in abcd (y / n)? y
<-------------- AUTOMATIC/BUG WHILE LOOP --------------------------->
Please enter a character:
The letter
is 0-times.
</--------------AUTOMATIC/BUG WHILE LOOP---------------------------->
Would you like to search a character in abcd (y / n)? n
Good bye!

所以,这里有一个可能的答案:

"将const char name[]更改为char name[100]"(来自@kaylum(

"更改scanf("%c", &searchingCharacter) --> scanf(" %c", %searchingCharacters)以使用输入流中的新行"(来自@user3121023(

以下是完整的代码:

#include <stdio.h>
int searchCharacters(const char*, char);
int getLength(const char*);
int main() {
char yesNo;
int end = 0;
char name[100]; <-- Changed -->
printf("please enter a name: ");
scanf("%99s", name);
fflush(stdin);
int length = getLength(name);
printf("n%s has a length of %i", name, length);
while(end != 1) {
printf("nnWould you like to search a character in %s (y / n)?", name);
scanf("%c", &yesNo); <-- Changed -->
switch(yesNo) {
case 'y':
printf("nPlease enter a character: ");
char searchingCharacter;
scanf(" %c", &searchingCharacter); <-- Changed -->
int numberOfCharacters = searchCharacter(name, searchingCharacter);
printf("nThe letter %c is %i-times", searchingCharacter, 
numberOfCharacters);
break;
case 'n':
printf("nGood bye!");
end++;
break;
}
}
return 0;
}
int searchCharacter(const char s[], char c) {
int numberOfIterations = getLength(s);
int numberOfCharacters = 0;
int i;
for (int i = 0; i < numberOfIterations; i++) {
if (s[i] == c) {
numberOfCharacters++;
}
}
return numberOfCharacters;
}
int getLength(const char s[]) {
int i = 0;
while(s[i++]);
return (i - 1);
}
Input/Output:
please enter a name: abcdefg
abcdefg has a length of 7 characters. <-- Working/Changed -->
Would you like to search a character in abcd (y / n)? y
Please enter a character: a <-- Working/Changed -->
The letter a is 1-times. <-- Working/Changed -->
Would you like to search a character in abcdefg (y / n)? n
Good bye!

最新更新