这是用'c'编写的,并用gcc编译。我不知道你还需要知道什么。
我能拼出的最小的完整例子如下所示。变量“numoms”在到达第23行(scanf()之后)时丢失其值。
我被难住了。也许这与scanf()重写numoms的空间有关?

#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);

}

最佳答案

对于头<inttypes.h>中定义的整数类型,应使用宏作为格式说明符。
来自C标准(7.8.1格式说明符宏)
1以下对象(如宏)中的每一个都扩展为一个字符
包含转换说明符的字符串文本,可能由修改
一种长度修饰符,适合在
转换相应的
整数类型。这些宏名的一般形式是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;
}

10-07 12:11