用于读取字符的C程序';无法识别正确输入的字符串。
希望你能帮我把它放好。 我目前正在努力完成我的大学让我们做的一项运动。我必须用C写一个程序,它扫描一个字符串,并通过一个名为read_name()的函数读取它。程序应输出输入的字符串是否正确。字符串的条件为:用于读取字符的C程序';无法识别正确输入的字符串。,c,string,if-statement,C,String,If Statement,希望你能帮我把它放好。 我目前正在努力完成我的大学让我们做的一项运动。我必须用C写一个程序,它扫描一个字符串,并通过一个名为read_name()的函数读取它。程序应输出输入的字符串是否正确。字符串的条件为: 第一个字符应该是大写字母 输入字符串中的所有其他字符必须是字母 字符串的最小长度必须至少为2个元素 字符串的最大长度必须为20个元素 我已经编写了程序,它执行得很好,但是每次我输入一个字符串,不管它是否只包含字母、数字或逗号之类的符号,它总是输出输入的字符串不正确。但是我认为我已经以某
- 第一个字符应该是大写字母
- 输入字符串中的所有其他字符必须是字母
- 字符串的最小长度必须至少为2个元素
- 字符串的最大长度必须为20个元素
#include <stdio.h>
#include <string.h>
#define MAX_STRING 20
#define MIN_STRING 2
#define UPPERCASE_MIN_ASCII 65
#define UPPERCASE_MAX_ASCII 90
#define LOWERCASE_MAX_ASCII 122
#define LOWERCASE_MIN_ASCII 97
int read_name(char input[]);
int main(void)
{
char pre_input[MAX_STRING];
char status;
printf("Please put in a string: ");
gets(pre_input);
status = read_name(pre_input);
if(status == 0) {
printf("Input was incorrect!");
} else {
printf("Input was correct");
}
return 0;
}
int read_name(char input[])
{
int i, n;
n = strlen(input);
if (n < MIN_STRING)
return 0;
if (input[0] < UPPERCASE_MIN_ASCII || input[0] > UPPERCASE_MAX_ASCII)
return 0;
for (i = 1; i <= n; i++) {
if (input[i] < UPPERCASE_MIN_ASCII || input[i] > LOWERCASE_MAX_ASCII) {
return 0;
} else if (input[i] > UPPERCASE_MAX_ASCII && input[i] < LOWERCASE_MIN_ASCII) {
return 0;
}
}
return 1;
}
#包括
#包括
#定义最大字符串20
#定义最小字符串2
#定义大写字母\最小字母\ ASCII 65
#定义大写字母\u MAX\u ASCII 90
#定义小写字母\u MAX\u ASCII 122
#定义小写字母\u MIN\u ASCII 97
int read_name(字符输入[]);
内部主(空)
{
字符前置输入[最大字符串];
字符状态;
printf(“请输入字符串:”);
获取(预输入);
状态=读取名称(预输入);
如果(状态==0){
printf(“输入不正确!”);
}否则{
printf(“输入正确”);
}
返回0;
}
int read_name(字符输入[])
{
inti,n;
n=strlen(输入);
if(nUPPERCASE_MAX_ASCII)
返回0;
for(i=1;i小写字母\u MAX\u ASCII){
返回0;
}else if(输入[i]>大写字母\u MAX\u ASCII&&input[i]<小写字母\u MIN\u ASCII){
返回0;
}
}
返回1;
}
Alex(i=1;i是的问题在于
for (i = 1; i <= n; i++) // i<=n should be i<n
for(i=1;我不使用get
:我尝试了scanf(“%s”,pre\u输入);但这也不起作用。当你调试代码时,你看到了什么?使用调试器或打印有用的文本都可以帮助你找到问题的原因。这些是编译器参数,而不是调试器。调试器是一个单独的程序,允许你逐步检查代码并查看它的作用。如果你的课程真的不允许使用调试器需要退款,调试是程序员最重要的技能。有更简单的方法来表达这些限制-例如#定义大写字母(u MIN)ASCII“a”
。#定义小写字母(u MAX)ASCII“z”
——尽管许多方法只是使用字符常量而不是冗长的宏名从
标题中使用islower()
或isupper()
或isalpha()
。噢,天哪。非常感谢。我不认为这有那么容易。:D
for (i = 1; i <= n; i++) // i<=n should be i<n