Modulo Ergebnis in int-Array



  • Hallo ich habe ein Problem damit das Ergebnis einer Modulo Rechnung einem int-Array zuzuordnen.
    Anstatt daß die einzelnen Ziffern dem Array zugeordnet werden, bekomme ich 0x28feb4

    int Zahl, Ziffern[15], a = 0;
    
    cin >> Zahl;
    while(Zahl)
        {
            Ziffern[a] = Zahl % 10;
    
            cout << Ziffern;
    
            a++;
    
            Zahl = Zahl / 10;
        }
    


  • Hallo123 schrieb:

    Anstatt daß die einzelnen Ziffern dem Array zugeordnet werden, bekomme ich 0x28feb4

    Das ist die Adresse des Arrays, du greifst ja nicht auf einen index zu.

    cout << Ziffern[a];
    


  • Ah okay die einzelnen Zahlen hat er zugeordnet. Aber kann ich nicht das gesamte Array ausgeben lassen wie bei char?



  • Hallo123 schrieb:

    Ah okay die einzelnen Zahlen hat er zugeordnet. Aber kann ich nicht das gesamte Array ausgeben lassen wie bei char?

    Nein. Ein Char-Array hat in C und C++ eine Sonderbehandlung und kann auch nur deswegen ausgegeben werden, weil es mit einem NUL terminiert wird/werden muss (Natürlich nur, wenn du das Char-Array auch wirklich als "String" nutzen willst, theoretisch kannst du damit machen was du willst), was bei keinem anderen Array der fall ist. Zur Laufzeit ist die größe eines Arrays unbekannt.



  • Die Größe dieses Arrays ist aber immerhin zur Compile-Zeit bekannt, darum ist das natürlich ein super idealer Fall um Templates anzuwenden!

    template< typename T, std::size_t Size >
    struct as_array_t {
    	as_array_t(const T(&arr)[Size])
    		: arr_(arr)
    	{}
    
    	const T(&arr_)[Size];
    };
    
    template< typename T, std::size_t Size >
    as_array_t<T, Size> as_array(const T(&arr)[Size])
    {
    	return as_array_t<T, Size>(arr);
    }
    
    template< typename T, std::size_t Size >
    std::ostream& operator<<(std::ostream& stream, const as_array_t<T,Size>& arr)
    {
    	stream << "{";
    	for (unsigned int i = 0; i < Size-1; ++i) {
    		stream << arr.arr_[i] << ",";
    	}
    	stream << arr.arr_[Size - 1] << "}";
    	return stream;
    }
    
    int main(int argc, char* argv[])
    {
    	int foo[] = { 32, 11, 23, 42, 11 };
    
    	std::cout << as_array(foo) << "\n";
    
    	return 0;
    }
    

    Oh gott, jetzt kommt bestimmt Rüffel 😉



  • ftfy:

    #include <array>
    #include <iostream>
    
    template< typename T, std::size_t N >
    std::ostream & operator<<( std::ostream & os, std::array< T, N > const & arr ) 
    { 
    	os << "{ "; 
    	for( auto const & i : arr )
    		os << i << ' ';
    	return os.put( '}' );
    }
    
    int main() 
    { 
         std::array< int, 5 > foo = { 32, 11, 23, 42, 11 }; 
         std::cout << foo << '\n'; 
    }
    


  • Naja, entweder man löst das Problem, oder man verändert das Problem 😉



  • Okay vielen Dank für die Auskunft 🙂 Mit dem Rest kann ich wenig anfangen 🤡


Anmelden zum Antworten