用于读取字符的C程序';无法识别正确输入的字符串。

用于读取字符的C程序';无法识别正确输入的字符串。,c,string,if-statement,C,String,If Statement,希望你能帮我把它放好。 我目前正在努力完成我的大学让我们做的一项运动。我必须用C写一个程序,它扫描一个字符串,并通过一个名为read_name()的函数读取它。程序应输出输入的字符串是否正确。字符串的条件为: 第一个字符应该是大写字母 输入字符串中的所有其他字符必须是字母 字符串的最小长度必须至少为2个元素 字符串的最大长度必须为20个元素 我已经编写了程序,它执行得很好,但是每次我输入一个字符串,不管它是否只包含字母、数字或逗号之类的符号,它总是输出输入的字符串不正确。但是我认为我已经以某

希望你能帮我把它放好。 我目前正在努力完成我的大学让我们做的一项运动。我必须用C写一个程序,它扫描一个字符串,并通过一个名为read_name()的函数读取它。程序应输出输入的字符串是否正确。字符串的条件为:

  • 第一个字符应该是大写字母
  • 输入字符串中的所有其他字符必须是字母
  • 字符串的最小长度必须至少为2个元素
  • 字符串的最大长度必须为20个元素
我已经编写了程序,它执行得很好,但是每次我输入一个字符串,不管它是否只包含字母、数字或逗号之类的符号,它总是输出输入的字符串不正确。但是我认为我已经以某种方式编写了这个程序,这样每一个可能的错误输入都会被识别出来,但是每一个正确的输入都应该被显示为正确的

我认为我的错误在函数“int read_name(char input[])”的for循环中。我无法更改此函数的声明,因为它是由我的大学预定义的。其他一切都可以改变。:)

我希望我把我的问题解释得足够清楚。先谢谢你

以下是程序代码:

#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