所以我目前正在用 C 编写一个程序,使用 switch 语句可以允许输入一个字符串,然后根据您从菜单中选择的值确定如何处理它。
这是我的代码,
#include <stdio.h>
int main()
{
int menu, end, i;
char string[100];
end = 0;
do
{
printf("Welcome to the string operations program.\n\n");
printf("1 - Enter a string\n");
printf("2 - Display the message using the string\n");
printf("3 - Count the number of characters in the string\n");
printf("4 - Display the string backwards\n");
printf("5 - Exit\n\n");
printf("Option: ");
scanf("%d", &menu);
switch (menu)
{
case 1:
printf("String: ");
scanf("%s", string);
break;
case 2:
printf("This is a message: Hello %s\n", string);
break;
case 3:
printf("There are %d characters in %s\n", strlen(string), string);
break;
case 4:
printf("string reversed gives: ");
for (i = strlen(string) - 1; i >= 0; i--)
printf("%c", string[i]);
printf("\n");
break;
case 5:
printf("Exit");
return 1;
break;
default:
printf("Invalid input, try again.\n");
break;
}
}while (end != 1);
return 0;
}
当我运行 1、2、3、4、5 时,它似乎适用于所有情况,因为这是问题的要求。但是,当我输入一个字母(例如“t”)时,它会按预期转到默认部分。当它进入这个状态时,它就会进入无限循环。
任何人都可以帮助我并向我展示如何不使其成为无限循环,而只是让它返回到开头,因为不允许用户输入?
最佳答案
发布的代码存在几个问题:
- 不处理用户未输入字符串的情况
- 多次显示欢迎消息
- 无法正确处理菜单选择 5
- 不会“同类比较”
- 在尝试输入字符串之前不清空标准输入
- 输入字符串中不允许有任何空格
- ...
以下建议代码:
- 更正了上面列出的所有问题
- 干净地编译
- 正确检查并报告错误
- 包含默认字符串,因此程序不会有未定义的行为
- 包含所需的头文件以及包含每个头文件的原因的文档
现在建议的代码:
#include <stdio.h> // printf(), scanf(), fprintf()
#include <stdlib.h> // exit(), EXIT_FAILURE
#include <string.h> // strlen()
int main()
{
int menu;
int end;
//int i;
char string[100] = "no string entered";
end = 0;
printf("Welcome to the string operations program.\n\n");
do
{
printf("1 - Enter a string\n");
printf("2 - Display the message using the string\n");
printf("3 - Count the number of characters in the string\n");
printf("4 - Display the string backwards\n");
printf("5 - Exit\n\n");
printf("Option: ");
if( 1 != scanf("%d", &menu) )
{
fprintf( stderr, "scanf for menu selection failed\n" );
exit( EXIT_FAILURE );
}
// implied else, scanf successful
switch (menu)
{
case 1:
// note leading space in format string to consume leftover newline in 'stdin'
printf("String: ");
if( 1 != scanf(" %99[^\n]", string) )
{
fprintf( stderr, "scanf for input string failed\n" );
exit( EXIT_FAILURE );
}
// implied else, scanf successful
break;
case 2:
printf("This is the string entered: <%s>\n", string);
break;
case 3:
// note appropriate format specifier for `size_t` from `strlen()`
printf("There are %lu characters in <%s>\n", strlen(string), string);
break;
case 4:
printf("string reversed gives: ");
for (size_t i = strlen(string); i; i--)
printf("%c", string[i-1]);
printf("\n");
break;
case 5:
printf("Exit");
end = 1;
break;
default:
printf("Invalid input, try again.\n");
break;
}
} while (end != 1);
return 0;
}
程序运行会产生以下输出:
Welcome to the string operations program.
1 - Enter a string
2 - Display the message using the string
3 - Count the number of characters in the string
4 - Display the string backwards
5 - Exit
Option: 2
This is the string entered: <no string entered>
1 - Enter a string
2 - Display the message using the string
3 - Count the number of characters in the string
4 - Display the string backwards
5 - Exit
Option: 1
String: this is a string with spaces
1 - Enter a string
2 - Display the message using the string
3 - Count the number of characters in the string
4 - Display the string backwards
5 - Exit
Option: 2
This is the string entered: <this is a string with spaces>
1 - Enter a string
2 - Display the message using the string
3 - Count the number of characters in the string
4 - Display the string backwards
5 - Exit
Option: 3
There are 28 characters in <this is a string with spaces>
1 - Enter a string
2 - Display the message using the string
3 - Count the number of characters in the string
4 - Display the string backwards
5 - Exit
Option: 4
string reversed gives: secaps htiw gnirts a si siht
1 - Enter a string
2 - Display the message using the string
3 - Count the number of characters in the string
4 - Display the string backwards
5 - Exit
Option: 6
Invalid input, try again.
1 - Enter a string
2 - Display the message using the string
3 - Count the number of characters in the string
4 - Display the string backwards
5 - Exit
Option: 5
Exit
关于c - 在 switch 语句中使用输入默认值时,程序陷入无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47340048/