Tworzysz nieskończoną pętlę for, zły warunek. liczba!=0 oznacza, że pętla wykywać się będzie cały czas ponieważ jak podasz np w zmiennej liczba 1 to dosłownie to brzmi dla for.
"Przyjmij dla i=0 pętlę wykonuj dopóki liczba jest inna od 0 (no a jest bo jest 1 czyli zapętlenie) inkrementuj pętlę."
Po drugie wynik nigdy w takim wypadku ci nie wyjdzie poprawny, bo char zostanie skonwertowany do Ascii i już dla samego warunku pętli do while dostaniesz 48. A dla np 1 i 0 dostaniesz 97, bo znak 0 w ascii to 48 w systemie dziesiątkowym a 1 to 49 w dziesiątkowym->wikipedia.
kolejna sprawa, podawanie zmiennej na początku by tylko zainicjować pętlę while jest głupotą. Do tego masz pętlę specjalnie do while która wykona się zawsze przynajmniej raz.
#include <iostream>
#include <string.h>
/*Program: zadanie domowe nr 1 z lekcji: Pêtle do ... while. */
using namespace std;
int suma = 0;
char liczba; //do zmiany
int main()
{
cout << "Podawaj cyfry oddzielone spacja, a podlicze Ci ich sume: ";
do
{
cin >> liczba;
// for (int i = 0; liczba != '0'; i++) // blad
suma += liczba;
}
while (liczba != '0'); błąd
cout << "Suma " << suma; // błędny wynik
return 0;
porpaw błędy