[英]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.