在C语言中进行输入时出现意外行为

在C语言中进行输入时出现意外行为,c,char,printf,C,Char,Printf,我正在尝试运行这段代码,这段代码对我来说似乎很好,但最终的结果不太令人信服。代码如下: #include<stdio.h> #include<stdlib.h> #include<string.h> int main() { unsigned char nT,nF; char extension[5]; puts("Enter No. of Testcases & Faults"); scanf("%d %d

我正在尝试运行这段代码,这段代码对我来说似乎很好,但最终的结果不太令人信服。代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
    unsigned char nT,nF;    
    char extension[5];

    puts("Enter No. of Testcases & Faults");
    scanf("%d %d %s", &nT, &nF, extension);
    printf("%d %d\n",nT,nF);
    getch();
}
以下是输出:

0 50
以下是预期产出:

50 50
注意:我只能使用无符号字符,不能使用无符号整数


我使用的是devcpp4.9.9.2。如果有人找到了解决方案或原因,请提供帮助。

查看您的
scanf
子句。您正在向其传递两个(指向)
无符号字符
变量的指针,但声明正在格式说明符(
%d
说明符)中读取两个
整数。如果要读取未签名字符,请传递
%hhu

当您将
&扩展名
传递到
scanf
时,无需使用符号AND。数组的名称转换为指向其第一个元素的指针,因此只需传递扩展名即可

您还使用了一个非常旧的IDE(Dev-C++),不再开发。可能底层编译器也过时了。我建议使用更新的工具,它是积极开发的,对新手非常友好,在一定程度上与Dev-C++类似

但是,在Windows平台上,MSVCRT库不支持
%hhu
格式说明符,如本文所述。MingGW编译器依赖于此实现,因此它也不支持windows上的
%hhu
。是一个在Windows上模拟Linux环境的项目,并使用其自己版本的C库分发,该库除其他外支持
%hhu
。作为旁注,您可以将Code::Blocks配置为使用Cygwin(如上所述)。我不知道使用Dev-C++是否可以实现同样的效果
    #include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
    unsigned int nT,nF;    
    char extension[5];

    puts("Enter No. of Testcases & Faults");
    scanf("%d %d %s", &nT, &nF, extension);
    printf("%d %d\n",nT,nF);
    getch();
}
#包括 #包括 int main() { 无符号整数nT,nF; 字符扩展[5]; puts(“输入测试用例和故障的数量”); scanf(“%d%d%s”,&nT,&nF,扩展名); printf(“%d%d\n”,nT,nF); getch(); }
#包括
#包括
#包括
int main()
{
无符号字符nT,nF;
字符扩展[5];
puts(“输入测试用例和故障的数量”);
scanf(“%hhu%hhu%s”,&nT,&nF,扩展名);
printf(“%hhu%hhu\n”,nT,nF);
//getch();
}
您可以在下图中看到输出


将指向错误类型和错误类型的指针传递到
scanf()
的未定义行为。使用%hhu会产生与以前相同的结果。我想问题在于编译器。你怎么说@lukeg@Ankit确保您的编译器版本支持%hhu格式说明符。我建议尝试一个新的或尝试切换到C99模式。但是,由于您在Windows上,您可能会面临另一个兼容性问题,有关详细信息,请参阅此问题:我看到了这个问题,我也面临着同样的问题。当我将nT和nF声明为全局变量时,输出与预期一样,但问题在于将它们声明为局部变量。我想这是windows特有的问题。无论如何,谢谢你提供的信息:)@lukeg@Ankit是的,这通常是Windows的问题。我刚刚检查过您是否可以尝试使用Cygwin(),它重新实现了标准的Windows库,并且代码在那里运行良好。我将更新我的答案。感谢您回答@dipika,但我必须使用unsigned char,并且无法使用intIs此代码在您的计算机上进行上述输入?如果您在windows平台上测试此代码将非常好,因为我使用的是windows:)平台可能没有问题。您可以在那里编译并运行它。请投票决定答案。平台有问题。请看这个问题
    #include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
    unsigned int nT,nF;    
    char extension[5];

    puts("Enter No. of Testcases & Faults");
    scanf("%d %d %s", &nT, &nF, extension);
    printf("%d %d\n",nT,nF);
    getch();
}
    #include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
    unsigned char nT,nF;    
    char extension[5];

    puts("Enter No. of Testcases & Faults");
    scanf("%hhu %hhu %s", &nT, &nF, extension);
    printf("%hhu %hhu\n",nT,nF);
   // getch();
}