簡體   English   中英

C 語言 字符數組后的單字符聲明錯誤

[英]C Language Single char declaration error after char array

n的聲明和n的聲明似乎有溢出現象 能告訴我詳細的原因嗎?

可操作代碼

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i, sum=0;
    char n, DNA[11]={};

    printf("용의자의 DNA정보를 입력하세요. :");
    scanf("%s", DNA);

    for(i=0; i<10; i++)
    {
        n = DNA[i];
        sum += atoi(&n);
    }

    if (sum%7 == 4)
        printf("범인");
    else
        printf("일반인");
}

無法操作的代碼

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i, sum=0;
    char DNA[11]={}, n;

    printf("용의자의 DNA정보를 입력하세요. :");
    scanf("%s", DNA);

    for(i=0; i<10; i++)
    {
        n = DNA[i];
        sum += atoi(&n);
    }

    if (sum%7 == 4)
        printf("범인");
    else
        printf("일반인");

*輸入條件最多10個字符

這兩個程序都有未定義的行為。

對於初學者,您不能使用空括號來初始化 C(與 C++ 相反)中的數組。

char n, DNA[11]={};

其次,function atoi需要一個指向字符串的指針。 但是,您使用的是單個字符n

sum += atoi(&n);

例如,如果您想添加輸入數字的數字,然后寫

for(i=0; DNA[i] != '\0'; i++)
{
    n = DNA[i];
    sum += n - '0';
}

您還需要保證輸入的字符串的長度不大於 10

scanf("%10s", DNA);

與其掃描字符串並假設輸入是數字,不如掃描單個數字。
將數字累加到總和中並變成數值。
輸入將以十位數字、換行符或非數字結尾。

#include <stdio.h>
#include <limits.h>

int main ( void) {
    int i = 0;
    int sum = 0;
    int n = 0;
    int number = 0;
    char newline[2] = "";

    printf("DNA : ");
    fflush ( stdout);

    for ( i = 0; i < 10; i++) {
        if ( 1 == scanf ( "%1[\n]", newline)) { // scan for newline
            break;
        }
        if ( 1 == scanf ( "%1d", &n)) { // scan for digit
            sum += n;
            if ( number < INT_MAX / n) {
                number *= 10;
                number += n;
            }
            else {
                fprintf ( stderr, "overflow\n");
                return 1;
            }
        }
        else {
            break;
        }
    }

    printf ( "number is %d\n", number);
    if ( sum % 7 == 4) {
        printf ( "remainder is 4\n");
    }
    else {
        printf("remainder is not 4\n");
    }
    return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM