0

次のコードは機能しますが、初期化されていない変数に関する警告が生成されます。

このコードは、@"2C12;5H1;1O16" などの分子を表す文字列を解析します。フォーマットが正しく、すべての成分が有効な同位体であることを確認します。リストされているように、完全に機能しますが、コンパイラから警告が生成されます。

//listOfNames is a global variable, an NSArray containing strings of all isotope names i.e. @"Na23"

-(bool)canGrokSpeciesName:(NSString*)theSpeciesName{
 //Test that the species name makes sense
 //Names should be of the form of repeated @"nnSSaa" with nn being the multiplier, SS being the element name, aa being the atomic mass number

bool couldGrok = [theSpeciesName isNotEqualTo:@""];
if(couldGrok){

    NSArray* listOfAtomsWithMultiplier = [theSpeciesName componentsSeparatedByString:@";"];

    for (int i=0; i<[listOfAtomsWithMultiplier count]; i++) NSLog(@"%@", [listOfAtomsWithMultiplier objectAtIndex:i]);

    NSInteger multiplet[ [listOfAtomsWithMultiplier count] ];
    bool ok[ [listOfAtomsWithMultiplier count] ];

    bool noFail = true;
    for (int i=0; i<[listOfAtomsWithMultiplier count]; i++) {
        NSScanner* theScanner = [NSScanner scannerWithString:[listOfAtomsWithMultiplier objectAtIndex:i]];
        NSString* multipletString;

        if(![theScanner isAtEnd]) [theScanner scanUpToCharactersFromSet:[NSCharacterSet letterCharacterSet] intoString:&multipletString];
        multiplet[i] = [multipletString integerValue];

        NSString* atomString;
        if(![theScanner isAtEnd]) [theScanner scanUpToCharactersFromSet:[NSCharacterSet decimalDigitCharacterSet] intoString:&atomString];

        NSInteger A;
        if(![theScanner isAtEnd]) [theScanner scanInteger:&A];

        NSLog(@"%@%i with multiplet of %i", atomString, (int)A, (int)multiplet[i]);
        bool hasBeenFound = false;
        for(int j=0; j<[listOfNames count]; j++){
            if(noFail) hasBeenFound = hasBeenFound || [[listOfNames objectAtIndex:j] isEqualToString:[NSString stringWithFormat:@"%@%i", atomString, (int)A]];
        }
        couldGrok = couldGrok && noFail && hasBeenFound;
    }
}

return couldGrok;

}

ただし、初期化すると

NSString* multipletString = @"";
NSString* atomString = @"";
NSInteger A = -1;

次に、NSScanner は、元の初期化された値でそれらを返します。基本的なものが欠けていますか?

コンパイラからの警告を無視したくないのですが、コンパイラの提案に従うとコードが壊れます。したがって、これは私のコードを修正する方法についての要求というよりも、基本的な情報の要求であると思います。ありがとう!

4

0 に答える 0