C toupper()不工作

C toupper()不工作,c,C,这里我检查输入数组(inputText[])中的每个字符是否与字母数组中的至少一个字母匹配。但是toupper()函数不适合我。我正在使用LinuxMint,并使用gcc进行编译 do { scanf(" %[^\n]s" , inputText ); printf("Input text supplied is: %s\n", inputText); int input_text_size = strlen(inputText) - 1; for(i

这里我检查输入数组(inputText[])中的每个字符是否与字母数组中的至少一个字母匹配。但是toupper()函数不适合我。我正在使用LinuxMint,并使用gcc进行编译

do
{
    scanf(" %[^\n]s" , inputText );     
    printf("Input text supplied is: %s\n", inputText);
    int input_text_size = strlen(inputText) - 1;

    for(int i = 0; i <= input_text_size; i++)
    {
        toupper(inputText[i]);//NOT WORKING
        printf("toupper val = %c\n", inputText[i]);//TESTING 
        //testing every char against every element in LETTERS array 
        for(int j = 0; j <= 26; j++)
        {
            if(inputText[i] == LETTERS[j])
                flag--;
        }
    }

    if(flag != 0)
    {
       printf("Invalid input\n");
       printf("only letters and spaces can be entered\n");
       flag = input_text_size;
    }

}while(flag == 0);
do
{
scanf(“%[^\n]s”,inputText);
printf(“提供的输入文本为:%s\n”,inputText);
int input_text_size=strlen(inputText)-1;

对于(int i=0;i,因为toupper是一个返回值的函数,所以您需要有一个变量或数组在同一索引中才能接收toupper返回的值


这应该可以解决您的问题。

请更仔细地查看手册页中的
int-toupper(int-c)
。函数原型表明它返回大写字符。换句话说,它不处理现有数据。相反,与函数通常所做的一样,它返回数据的转换

 for(i=0;i!=length;i++){
   string[i] = toupper(string[i]);
 }

toupper
不合适:
inputText[i]=toupper(inputText[i]);
2个问题合一不是提问的方式。我在评论中回答了第一个问题,也许现在你的问题是为了说明你的格式说明符
%[^\n]s
是两种不同格式的混合体
%[]
%s
。在知道
input\u text\u size
的值之前,您已经设置了
int flag=input\u text\u size;
。您是否有一个同名的阴影变量,因为看到的第一个用法不在
int-input\u text\u size=strlen(inputText)-1;的范围内。
int-input\u-text\u size=strlen(inputText)-1;
strlen函数无论如何都不包含空终止符,因此不要减去0注意,标准原型为-
int-toupper(int-c);
,因为它必须接受转换为
无符号字符的每个
值(0..255)以及EOF(负数,通常为
-1
)如果参数是
char
,它就不能这样做。谢谢@JonathanLeffler。我没有费心去查找它,只是在内存中工作。严格来说,如果你可以在单字节代码集中处理重音字符,如果纯
char
是有符号类型,而不是无符号类型,那么你需要
string[I]=touper((unsigned char)string[i];
-如果处理的是无符号的纯
char
,如果不处理重音字符,也可以使用它。(这些都不适用于多字节或宽字符代码集-这是一个完全独立的bag'o'worms!)我想我在之前的评论中也应该提到这一点。很抱歉对您的答案进行增量处理。欢迎使用堆栈溢出。我认为如果您展示简单的代码来说明您所说的内容,您的答案会更好。如果您内联添加代码,请将其括在后面的勾号中。
…`sample code`.
。如果您将代码添加为显示块,在编辑窗口中按您希望的格式设置它的格式,忽略预览,然后选择它并使用编辑框上方的
{}
按钮将其缩进为代码。现在检查预览。不要在代码中使用制表符。在编写更大的代码块时,请使用“复制”“粘贴”。