C 每次运行代码时都会生成不同的输出
在这段代码中,当我执行它时,它有时显示nT和nF的正确值,有时显示正确的nF但不正确的nTi.e 0。 为什么会这样C 每次运行代码时都会生成不同的输出,c,scanf,C,Scanf,在这段代码中,当我执行它时,它有时显示nT和nF的正确值,有时显示正确的nF但不正确的nTi.e 0。 为什么会这样 #include<stdio.h> #include<stdlib.h> #include<string.h> int main() { unsigned char nT,nF; puts("Enter No. of Testcases & Faults"); scanf(" %hhu %hhu",&am
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
unsigned char nT,nF;
puts("Enter No. of Testcases & Faults");
scanf(" %hhu %hhu",&nT,&nF);
printf("\n %hhu %hhu",nT,nF);
}
您需要使用%hhu作为未签名字符的格式说明符。我知道,这是一个酒吧小测验。此外,您可能希望在格式化程序之间引入一些空格:
int read = scanf("%hhu %hhu %s", &nT, &nF, extension);
目前,程序的行为尚未定义
在C99之前,您几乎完全受编译器的支配
进一步说明:
始终检查scanf的返回值,它为您提供有关成功读取的输入数量的有用信息
扩展名仅适用于4个字符加上nul终止符
遗憾的是,你用截图毁了这个问题。请键入输出。我将投票关闭此问题,因为该问题已更改,部分答案不再相关。如果我输入“2 3 hello”作为输入,则仍将输出显示为“0 3”。此处没有足够的空间容纳hello。别忘了它包含一个nul-terminator。那又怎样?还是没有地方。文字Hello需要6个字节,而不是5个字节。我从scanf中删除了扩展名,但问题仍然存在。是否检查scanf的返回值?考虑在格式化程序之间引入一些空格,我现在把它添加到答案中。