这是写在' c'并用gcc编译。我不确定你还需要知道什么。
这里展示了我可以放在一起的最小的完整示例。变量' numatoms'当它到达第23行时(在scanf()之后)失去它的值。
我很难过。也许它与scanf()覆盖了numatoms的空间有关?
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
/*
*
*/
int main(int argc, char** argv) {
uint8_t numatoms;
uint8_t r;
char a[20];
do {
printf("NO. OF ATOMS?");
fflush(stdout);
scanf("%d", &numatoms);
printf("\r\n");
for(;;){
printf("value of numatoms is %u\r\n", numatoms);
printf("RAY?");
fflush(stdout);
scanf("%u", &r);
printf("value of numatoms is %u\r\n", numatoms);
if(r < 1)
break;
else {
printf("value of numatoms is %u\r\n", numatoms);
}
}
printf("CARE TO TRY AGAIN?");
fflush(stdout);
scanf("%s", a);
printf("\r\n");
} while (a[0] == 'y' || a[0] == 'Y');
return (EXIT_SUCCESS);
}
答案 0 :(得分:4)
uint8_t
是8位长%u
读取无符号整数(可能是32位长)。
您需要将numatoms
“更大”(即unsigned int
)或阅读正确的尺寸(请参阅scanf can't scan into inttypes (uint8_t))
答案 1 :(得分:2)
您应该为标头<inttypes.h>
中定义的整数类型使用宏作为格式说明符。
来自C标准(格式说明符的7.8.1宏)
1以下每个类似对象的宏都会扩展为一个字符 包含转换说明符的字符串文字,可能由 一个长度修饰符,适合在a的format参数中使用 转换相应的格式化输入/输出功能 整数类型。这些宏名称具有PRI的一般形式 (fprintf和fwprintf系列的字符串文字)或SCN (fscanf和fwscanf系列的字符串文字),217) 后跟转换说明符,后跟相应的名称 在7.20.1中使用类似的类型名称。在这些名称中,N代表 7.20.1中所述类型的宽度。
用于转换说明符u
的无符号整数类型的宏的一般形式如下所示
SCNuN
这是一个示范程序
#include <stdio.h>
#include <stdint.h>
#include <inttypes.h>
int main(void)
{
uint8_t x;
scanf( "%" SCNu8, &x );
printf( "x = %u\n", x );
return 0;
}