Näytä kirjoitukset

Tässä osiossa voit tarkastella kaikkia tämän jäsenen viestejä. Huomaa, että näet viestit vain niiltä alueilta, joihin sinulla on pääsy.


Viestit - teele

Sivuja: [1] 2 3 ... 46
1

Jonkin verran aiheen sivusta, mutta kun mittaamisesta ja ledi-lampustakin on ollut puhetta, niin tuli mieleen vanha kysymys:

Miten saisi mitattua asunnon ilmanvaihtokanavassa kulkevan ilmamäärän. Olisi mielenkiintoista tietää, kuinka paljon ilmanvaihtoputkessa siirtyy ilmaa. Ilmanvaihtoputkeen pääsee asentamaan jonkinlaisen anturin tms. poistamalla ritilän hetkeksi.

 

2

Tämä libreofficen versio on 24.2.7.2,  eikä "Näytä - Työkalurivit "-valinnoilla saa logoa näkymään, luultavasti sitä ei siis ole.

Ehkä niissä koneissa, joissa se näkyy, se on asennettu lisäpakettina?

Minkäänlaista pakkoa logon saamiseksi ei ole, pelkkää kokeilunhalua vain.

3
Tässä vielä selvennykseksi, pitäisi toimia näin tekoälyn mukaan, logo-kielellä writessa ei varmaan ole sen kummemmin tekoälyn kanssa tekemistä:

Koodia: [Valitse]
Open LibreOffice Writer (a normal text document).
     
      Go to View ▸ Toolbars ▸ Logo to show the LibreLogo toolbar (sometimes called “Logo” or “LibreLogo”).
     
      You should see buttons like arrows (turtle moves), “Start Logo program”, “Stop”, “Home”, and “Clear screen”.


4

Kerrotaan, että writessa saa Logo-painikkeen työkaluriville, mutta en onnistunut sitä sinne saamaan tekoälyn ohjeiden avullakaan. Koneessani on suomenkielinen Ubuntu 24,04.

Onkohan Logo jo tässä perusasennuksessa tulleessa toimistopaketissa,

En vielä edes tiedä, mihin sitä voisi käyttää, mutta kaikenlaista tulee kokeiltua.









5
Toisen tekoälyn kirjoittaman ohjelman kanssa onnistui vähän paremmin. Ohjelma tuntuu toimivan, ja nyt pitäisi sitten selvittää, mitä se oikeastaan tekee. Pitäisi päästä käsiksi niihin tallennettuihin ääniarvoihin lukuina.

Mutta alkuperäinen kysymys taitaa olla ratkennut. Kiitoksia lähestymistapavihjeistä :)

Ohjelma on tässä:

Koodia: [Valitse]

#include <iostream>
#include <vector>
#include <alsa/asoundlib.h>
#define RATE 44100
#define CHANNELS 1
#define SECONDS 5
void configure_pcm(snd_pcm_t* handle) {
 snd_pcm_hw_params_t* params;
 snd_pcm_hw_params_alloca(&params);
 snd_pcm_hw_params_any(handle, params);
 snd_pcm_hw_params_set_access(handle, params, SND_PCM_ACCESS_RW_INTERLEAVED);
 snd_pcm_hw_params_set_format(handle, params, SND_PCM_FORMAT_S16_LE);
 snd_pcm_hw_params_set_channels(handle, params, CHANNELS);
 unsigned int rate = RATE;
 snd_pcm_hw_params_set_rate_near(handle, params, &rate, 0);
 snd_pcm_hw_params(handle, params);
}
int main() {
 snd_pcm_t *capture_handle, *playback_handle;
 long total_frames = RATE * SECONDS;
 std::vector<int16_t> buffer(total_frames);
 // Open capture device (Microphone)
 if (snd_pcm_open(&capture_handle, "default", SND_PCM_STREAM_CAPTURE, 0) < 0) return 1;
 configure_pcm(capture_handle);
 std::cout << "Recording for 5 seconds..." << std::endl;
 snd_pcm_readi(capture_handle, buffer.data(), total_frames);
 snd_pcm_close(capture_handle);
 // Open playback device (Speakers)
 if (snd_pcm_open(&playback_handle, "default", SND_PCM_STREAM_PLAYBACK, 0) < 0) return 1;
 configure_pcm(playback_handle);
 std::cout << "Playing back..." << std::endl;
 snd_pcm_writei(playback_handle, buffer.data(), total_frames);
 
 snd_pcm_drain(playback_handle);
 snd_pcm_close(playback_handle);
 return 0;
}


Käännös näin ja ajo

Koodia: [Valitse]
g++ äänikoe.cpp -o äänikoe -lasound
./äänikoe


6

Tekoälyn käyttö oli hyvä vihje. Se kirjoittaakin nopeasti ohjelmia pyydettäessä

Koodia: [Valitse]
On Ubuntu 24.04 with the libasound2-dev package, write a c++ program that reads a sound sample of 5 seconds from the laptop microphone and stores in a buffer as 16 bit values from a single channel and then outputs the sample from the buffer via the laptop speakers.

Ylllä olevan pyynnön tuloksena saatu ohjelma kääntyy ilman varoituksia, mutta ei näytä tekevän yhtään mitään. Lisäsin sinne yhden tulostusrivinkin tarkistusta varten, mutta sekään ei tulostu.

En valitettavasti vielä ymmärrä äänenkäsittelystä niin paljon, että voisin arvioida, voisiko ohjelman kohtuutyöllä saada toimimaan.

Koodia: [Valitse]

#include <iostream>
#include <vector>
#include <alsa/asoundlib.h>

int main() {
    const unsigned int sample_rate = 44100;
    const unsigned int seconds     = 5;
    const unsigned int channels    = 1;
    const snd_pcm_format_t format  = SND_PCM_FORMAT_S16_LE;

    const snd_pcm_uframes_t total_frames = sample_rate * seconds;
    const snd_pcm_uframes_t period_size  = 1024; // frames per read/write
    std::vector<int16_t> buffer(total_frames * channels);

    int rc;
    snd_pcm_t* capture_handle  = nullptr;
    snd_pcm_t* playback_handle = nullptr;
    snd_pcm_hw_params_t* params = nullptr;

    // --------- Open and configure capture (microphone) ----------
    rc = snd_pcm_open(&capture_handle, "default",
                      SND_PCM_STREAM_CAPTURE, 0);
    if (rc < 0) {
        std::cerr << "Unable to open capture device: "
                  << snd_strerror(rc) << std::endl;
        return 1;
    }

    snd_pcm_hw_params_malloc(&params);
    snd_pcm_hw_params_any(capture_handle, params);
    snd_pcm_hw_params_set_access(capture_handle, params,
                                 SND_PCM_ACCESS_RW_INTERLEAVED);
    snd_pcm_hw_params_set_format(capture_handle, params, format);
    snd_pcm_hw_params_set_channels(capture_handle, params, channels);
    unsigned int rate = sample_rate;
    snd_pcm_hw_params_set_rate_near(capture_handle, params, &rate, nullptr);

    snd_pcm_uframes_t psize = period_size;
    snd_pcm_hw_params_set_period_size_near(capture_handle, params, &psize, nullptr);

    rc = snd_pcm_hw_params(capture_handle, params);
    if (rc < 0) {
        std::cerr << "Unable to set capture HW params: "
                  << snd_strerror(rc) << std::endl;
        snd_pcm_hw_params_free(params);
        snd_pcm_close(capture_handle);
        return 1;
    }
    snd_pcm_hw_params_free(params);

    // --------- Capture into buffer ----------
    {
        snd_pcm_uframes_t frames_captured = 0;
        while (frames_captured < total_frames) {
            snd_pcm_uframes_t frames_to_read =
                std::min(psize, total_frames - frames_captured);

            rc = snd_pcm_readi(capture_handle,
                               buffer.data() + frames_captured * channels,
                               frames_to_read);
            if (rc == -EPIPE) {
                // Overrun
                snd_pcm_prepare(capture_handle);
                continue;
            } else if (rc < 0) {
                std::cerr << "Error reading from capture device: "
                          << snd_strerror(rc) << std::endl;
                break;
            } else {
                frames_captured += rc;
            }
        }
    }

    snd_pcm_drain(capture_handle);
    snd_pcm_close(capture_handle);


    std::cout << "näyte luettu:" << rc << std::endl;

    // --------- Open and configure playback (speakers) ----------
    rc = snd_pcm_open(&playback_handle, "default",
                      SND_PCM_STREAM_PLAYBACK, 0);
    if (rc < 0) {
        std::cerr << "Unable to open playback device: "
                  << snd_strerror(rc) << std::endl;
        return 1;
    }

    snd_pcm_hw_params_malloc(&params);
    snd_pcm_hw_params_any(playback_handle, params);
    snd_pcm_hw_params_set_access(playback_handle, params,
                                 SND_PCM_ACCESS_RW_INTERLEAVED);
    snd_pcm_hw_params_set_format(playback_handle, params, format);
    snd_pcm_hw_params_set_channels(playback_handle, params, channels);
    rate = sample_rate;
    snd_pcm_hw_params_set_rate_near(playback_handle, params, &rate, nullptr);

    psize = period_size;
    snd_pcm_hw_params_set_period_size_near(playback_handle, params, &psize, nullptr);

    rc = snd_pcm_hw_params(playback_handle, params);
    if (rc < 0) {
        std::cerr << "Unable to set playback HW params: "
                  << snd_strerror(rc) << std::endl;
        snd_pcm_hw_params_free(params);
        snd_pcm_close(playback_handle);
        return 1;
    }
    snd_pcm_hw_params_free(params);

    // --------- Play back from buffer ----------
    {
        snd_pcm_uframes_t frames_written = 0;
        while (frames_written < total_frames) {
            snd_pcm_uframes_t frames_to_write =
                std::min(psize, total_frames - frames_written);

            rc = snd_pcm_writei(playback_handle,
                                buffer.data() + frames_written * channels,
                                frames_to_write);
            if (rc == -EPIPE) {
                // Underrun
                snd_pcm_prepare(playback_handle);
                continue;
            } else if (rc < 0) {
                std::cerr << "Error writing to playback device: "
                          << snd_strerror(rc) << std::endl;
                break;
            } else {
                frames_written += rc;
            }
        }
    }

    snd_pcm_drain(playback_handle);
    snd_pcm_close(playback_handle);

    return 0;
}

/*
g++ play_after_01.cpp -o play_after_01 -lasound
./play_after_01
*/


Muokk.
Muokkasin vähän vanhaa otsikkoa, ehkä olisi pitänyt laittaa uusi aihe, mutta toiminnan tarkistamiseksi se ääni olisi kätevää saada myös ulos koneesta. Tavote olisi siis saada ääni taullukkoon ja sieltä ulos kaiuttimelle tässä vaiheessa.


7
Näkymä nm:n vastauksessa on juuri samanlainen, jonka olen onnistunut saamaan esille, pienenä erona saattaa olla se, että alareunan pallukkarivistä puuttuu pallukoita ja se on paljon lyhyempi.

Mutta näkymä ei tulekaan aina esille kuvaketta napsautettaessa, joskus se häviää itsestään aika nopeasti, ennen kuin siihen on ehditty koskea ja ainakin yhden kerran pääsin valinnoissa kielivalinnoista eteen päin seuraaviin valintaikkunoihin.

Tapahtumat näyttävät olevan epäsäännöllisiä, ennakoimattomia ja sattuman varaisia. Koskaan varsinainen asentaminen ei kuitenkaan ole alkanut, niin pitkällen en ole päässyt kyselyikkunoissa. ja puuttuvat keskeytysvektorit ovat 1.55,  2.55 ja 3.55 eikä /boot/ osiota näemmä löydy.

Voisivatko nämä oireet viitata siihen, että koneessa tai kiintolevyssä on ongelmia. Asennusversio on Ubuntu 24.04.3, enkä muista, olenko sen joskus ennen asentanut vai hainko sen vain varalle.


8
Sen verran mitä muistan nyt yrittäessäni saada 24.04 ubuntua asennetuksi on, että ensin tulee ilmoitus, että poista asennuslähde ja paina sitten enteriä.

Sen jälkeen kone sammuu. Onnistuin yhdellä kerralla sammuttamaan koneen niin, että se käynnistyikin horrostilasta tikun ollessa paikallaan, käynnistys menikin aika nopeasti verrattuna tikulta käynnistymiseen.

Mitä etua on vanhemman version asentamisessa, onko 24.04 -versiossa joitain asioita, joita et halua. Eikö kone sammu, jos vain pitää virtanappia pohjassa.

9
Pääsen Ubuntun kokeilutilaan ja se näyttää toimivan oikein hyvin, tekstinkäsittely käynnistyy jne.. Mutta asennusvalinta tuottaa vain kielikysymyksen pitkine valinnaiskielivaihtoehtoineen ja sen jälkeen ei taphdu mitään.

(sivuhuomio: kone oli näköjään horrostanut Ubuntun asennustilassa ja käynnistyi todella nopeasti, samutin sen viimeksi jotenkin väärin luultavasti)

Kun koneen käynnistää asennustikku usb-paikassa, tulee virheilmoitus /boot/ not found, mutta esittelytila käynnistyy tikulta.

Suoritin on AMD A8-6410 APU

Bios ilmoittaa oevansa InsydeH20 rev. 3.7

Secure boot settings on laitettu pois päältä.

Tikulta käynnistyessä tulee ilmoitus /boot/ not found ja vähän myöhemmin että no irq vectoreita 3 kpl puuttuu.

Tekoaälystä ei ole ollut apua. Se toimittaa hyvin pitkän listan toimista, joiden merkitystä en oikein ymmärrä.

" How can you set InsydeH20 bios to allow installation of Ubuntu "24.04 on acer E5-521" esimerkiksi grok.comissa tai perplexity.aissa


10
vielä asentamatta, sellaisissa ohjeissa, jotka löysin, neuvotaan laittamaan UEFI-tiedosto luotetuksi ja pitäisi löytyä

" Navigate to: HDD0 > EFI > 'ubuntu' and select SHIMX64.EFI (Enter shimx64 as name)  "

mutta pystyn löytämään ainoastaan    HDD1 -> EF! ->   <,,>
                                                                                        <Microsoft>
                                                                                        <Boot>
                                                                                        <OEM>

Ubuntu tai siihen viittaava puuttuu?

USB taitaakin olla jo luotettu, koska kone käynnistyy oikein hyvin tikulta kokeilu- ja asennustilaan.

Biosin ohjelma on InsydeH20 setup utility.


11

Nyt on php-osuus kommentoitu pois ja tiedostotyypiksi vaihdettu html php:n tilalle. Sivu näkyy ainakin omalla koneellani nyt muotoiltuna.

Jotain oli jossain muuttunut, koska näkymä oli selaimella vaihtunut, mutta onko muutos ollut selaimessa vai apachessa, ei vielä ole selvinnyt.

Kiitoksia neuvoista :)



12

Omassa koneessani näkyy selaimessa lähdeteksti, ja siinä on pikku pätkä php:tä lopussa, joka pitäisi oikeastaan kommentoida pois, mutta se ei ole ennenkään haitannut näkymää. Toinen sivu toisessa osoitteessa palvelimella näkyy  kuitenkin muotoiltuna, eli ehkä apachea ei tarvitsisi opetella säätämään. Voisiko omassa firefoxissani olla jotain, mikä vaikuttaa asiaan?

Koodia: [Valitse]
<!--
https://www.w3schools.com/html/html_layout.asp
-->

<!DOCTYPE html>
<html lang="fi">
<head>
<title>SLAM ry</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
* {
  box-sizing: border-box;
}

body {
  font-family: Arial, Helvetica, sans-serif;
}

/* Style the header */
header {
  background-color: #666;
  padding: 30px;
  text-align: center;
  font-size: 35px;
  color: white;
}

/* Create two columns/boxes that floats next to each other */
nav {
  float: left;
  width: 30%;
  height: 300px; /* only for demonstration, should be removed */
  background: #ccc;
  padding: 20px;
}

/* Style the list inside the menu */
nav ul {
  list-style-type: none;
  padding: 0;
}

article {
  float: left;
  padding: 20px;
  width: 70%;
  background-color: #f1f1f1;
  /* height: 300px; */  /* only for demonstration, should be removed */
}

/* Clear floats after the columns */
section:after {
  content: "";
  display: table;
  clear: both;
}

/* Style the footer */
footer {
  background-color: #777;
  padding: 10px;
  text-align: center;
  color: white;
}

/* Responsive layout - makes the two columns/boxes stack on top of each other instead of next to each other, on small screens */
@media (max-width: 600px) {
  nav, article {
    width: 100%;
    height: auto;
  }
}
</style>
</head>

<body>

<header>
  <h4>SLAM ry </h4>
  Suomen lentokoneasentajat ja mekaanikot ry
</header>

<section>
  <nav>
    <ul id = "my_links1">  <!-- tämän linkit korvataan -->
     <li><a href="tarina01.html">Artikkeli 1</a></li>
     <li><a href="tarina02.html">Artikkeli 2</a></li>
     <li><a href="tarina03.html">Artikkeli 3</a></li>
     <li><a href="tarina04.html">Artikkeli 4</a></li>
     <li><a href="tarina05.html">Artikkeli 5</a></li>
     <li><a href="tarina06.html">Artikkeli 6</a></li>
     <li><a href="tarina07.html">Artikkeli 7</a></li>
     <li><a href="tarina08.html">Artikkeli 8</a></li>
     <li><a href="tarina09.html">Artikkeli 9</a></li>
     <li><a href="tarina10.html">Artikkeli 10</a></li>
     <li><a href="tarina11.html">Artikkeli 11</a></li>
     <li><a href="tarina12.html">Artikkeli 12</a></li>
    </ul>
  </nav>
 
<script src="script01.js"></script>   <!-- linkkien korvausscripti -->
                                      <!-- my_links1 korvataan     -->
  <article>
 
<!--
         XXXXXXXXXXXXXXXXXXXXX    ÄLÄ POISTA TÄSTÄ YLÖS PÄIN YHTÄÄN MITÄÄN  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-->


    <h1>
Vuosikokous
    </h1>


<br/>
Slam ry:n vuosikokous on pidetty ja sääntömääräiset asiat käsitelty.
        Yhdistyksen toiminta jatkuu tavalliseen tapaan. Kiitokset osallistjille!

        <br/><br/>
       
<br/><br/>

<br/><br/>

<br/><br/>

<br/><br/>

<br/><br/>

<br/><br/>

<br/><br/>

<br/><br/>

<br/><br/>

<br/><br/>

<br/><br/>
 

<br/><br/>

   



<!--
         XXXXXXXXXXXXXXXXXXXXX    ÄLÄ POISTA TÄSTÄ ALAS PÄIN YHTÄÄN MITÄÄN  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-->
  </article>
</section>

<footer>
  <p> Ensimmäisen tarinan loppu</p>
</footer>




<?php 

$handle 
fopen("mycounter.txt""r");
if(!
$handle){

 echo 
"could not open the file" ;

}
else {


$counter = (int ) fread($handle,20);
fclose ($handle);
$counter++;
echo" <strong> tarkistusnumero "$counter " </strong> " ;
$handle fopen("mycounter.txt""w" );
fwrite($handle,$counter) ;
fclose ($handle) ;
}
?>




</body>
</html>

13
Tähän asti pilvikoneessa oleva sivu

slam.dy.fi

on näkynyt oikein muotoiltuna, mutta nyt se näkyy tekstinä firefoxissa. Miten saisi sen näkymään jälleen muotoiltuna apachella, niin kuin ennenkin?

Firefoxin network manager näyttää että

Accept on
   text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

pitäisikö sitä jotenkin muuttaa?



14
Tikulla on ubuntu 24,04. -ubuntu, joka käynnistyy ja näyttää ihan oikealta kaikkine Install or try -kuvakkeineen, mutta mitään ei aloiteta asentamaan, vaikka kuvakkeita napsauttaa.  Muuten kaikki näkymä on sellainen, kuin kokeilu tai asennustikulla käynnistettäesä yleenä on ollut.

Tikulta käynnistettäessä tulee kuitenkin tekstitilassa nopeasti näkyvä valitus, että irq vektoria ei löydy. Myös boot -virheilmoitus näkyy ihan ensimmäisenä. Voin yrittää saada sen tarkemmin tänne, jos se on ratkaiseva tieto. Netistä löytyi tietoa, että acerilla on oma luottamusasetus, jota pitää muutella biosissa, mutta tarkempaa tietoa siitä ei ole.

Asennustikku siis kuitenkin käynnistyy ja näyttää muuten toimivan näkymässä, eli ainakin itsensä asennustikun ubuntu on osannut käynnistää, ei lisene siis kysymys boot-tiedoston löytymättömyydestä? Mistä pitäisi alkaa etsiä ratkaisua.

muokk.:
tässä netistä asiaan mahdollisesti liittyvää tietoa, en ole ehtinyt kokeilla
"
So, you need to be in UEFI mode, set that in the BIOS, then set the EFI file on the Linux install flash drive as trusted. If the drive actually works, which is still up in the air right now, the install should proceed fine. Your EFI file is usually located in the /boot/efi partition or folder on the installer. It's probably called something like bootx64.efi.

"

15
Kun koneen mikrofoni kuulee ääntä, tämä muutettaneen jossain vaiheessa digitaaliseksi eli numeroiksi.

Miten saisi tällaisia mikrofonilta peräisin olevia numeroita esimerkiksi 100-paikkaiseen taulukkoon aina tietyin aikavälein, kun koneessa on 24.04 Ubuntu.

Millaisella nopeudella tai taajuudella näitä digitalisoituja numeroita tulee 24.04 Ubuntussa ja saisiko vaikka kaikki 100 peräkkäistä arvoa taulukkoon niin, että se olisi kohtuullisen kevyt toiminto suorittimelle tai väylälle tai muille asiaan liittyville laitteille.

En tunne digitaalista äänitekniikkaa Ubuntussa yhtään, joten ihan käytännönselitykset olisivat  tervetulleita.


16

Asia selvisi, avattaessa vain valitaan oikea ohjelma ehdotetuista.

Kiitoksia  :)

17
Koneessa on ubuntu 24.04 perusversiona ja sen mukana tullut snap-firefox.

Miten olisi paras toimia pdf-asiakirjojen kanssa selaimessa. Joskus aikaisemmin oli mahdollista ruksata asetuksista avaa pdf-tiedostona -valinta, mutta nuykyään sen tilalla lienee system handler -valinta. Mitä se oikein tarkoittaa?

Liittyykö netin pdf:iin jotain turvallisuusongelmia ja niitä ei saisi asiakirjankatselimella suoraan availla.?

Helppoa olisi, jos pdf:t avautuisivat suoraan pdf:inä ja ne voisi halutessaan tallentaa asiakirjankatselimella, miten haluaa, vai onko suositeltavampaa avata ne selaimessa pdf:nä?





18

Kokeilu onnistui. Heti ensimmäisestä vastauksissa olleista linkeistä onnistuttiin nuottipapperi tulostamaan pdf-tiedostoksi.

Rosegarden näyttää myös mielenkiintoiselta, ehkä se pitäisi laittaa kokeiluun flatpackina tai odottaa, että se tulee vakiopaketteihin.

Kiitoksia  vastauksista  :)

19
Voisiko perusohjelmilla, write, impress, tms., tehdä tavallisen nuottiviivaston, jossa on sävel- ja bassoalueet tavalliseen tapaan, siis sellaisen Aaron pienokoulu -nuottiviivaston.

Oma koneeni on pieni, enkä haluaisi asennella ylimääräisiä ohjelmia. (lilypod olisi oikein mukava, mutta, koska sen nuottimerkinnät eivät liene vakiomuotoisia, ei sitäkään viitsisi asennella tilaa viemään. Vakiomuotoiset nuottimerkinnät olisivat mielestäni sellaisia, joita ymmärretään esim. midistandardejen mukaan)

Tekoälyltä saadut ohjeet nuottiviivaston tekemiseksi writelle eivät vaikuttaneet kovin päteviltä.


20
 Jälleen "mielenkiintoinen" c++ strinstream -ongelma. En millään keksi, miksi alla olevassa lyhyessä kokeiluohjelmassa ei koskaan löydetä syötteen lopussa olevia ylimääräisiä merkkejä.

Kolmen kentän arvot (nu ss os) luetaan oikein ja haluttu määrä int arvojakin (j) onnistutaan lukemaan, mutta en koskaan onnistu havaitsemaan ylimääräisiä merkkejä viimeisen j:n jäljessä.
Miksi char-muuttujia lukevaan while-silmukkaan ei koskaan mennä eikä ylimääräinen_merkki saa koskaan luettuja arvoja (näyttäisi, että ääkköset toimivat g++ -kääntäjässä muuttujan nimessä)

Koodia: [Valitse]

#include <iostream>
#include <string>
#include <sstream>

#include <vector>

struct ParsedData
{ int nu;
  std::string ss;
  std::string os;
  std::vector<int> valinnat;  // valinnat
 
};

int j;  // valinta intinä

bool string_to_vector(const std::string& syote, ParsedData& tulos)
{ std::stringstream ss(syote);
  if(!(ss >> tulos.nu >> tulos.ss >> tulos.os))
    {
     return false; // Jäsentäminen epäonnistui.
    }
        std::cout <<tulos.nu << tulos.ss << tulos.os << std::endl;
  while(ss >> j)
    {
      tulos.valinnat.push_back(j);
          std::cout << j << std::endl;
    }
 char ylimääräinen_merkki = 'q'; //ääkköset toimivat muuttujassa myös???  <<===============
   //if(ss >> ylimääräinen_merkki)
   while(ss >> ylimääräinen_merkki) //   <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<???????
     {                              //  <<<<<<<<<<<<<<<<<<<< tänne ei päästä koskaan ?????
       //return false;  // Ylimääräistä dataa löytyi.
       std::cout << "yy ";   //  ei koskaan tulla tänne ??????
     }
  return true; // Jäsentäminen onnistui ja syöte oli täysin käytetty.
}

// Pääohjelma, joka esittelee funktion käyttöä.
int main(int argc, char *argv[])

  ParsedData tulos;
  if( string_to_vector(argv[1], tulos) )
    { std::cout << "onnistui" << std::endl;
    }   
  else
    { std::cout << "tuli virhe" << std::endl;
    }
 
  return 0;
}

/
// g++ kokeilu.cpp -o kokeilu -pedantic
// ./kokeilu '33 ppppp ööö 11   12 oooo'

Muokk. 1

Toisaalta aika tyhmä kysymys. Kun while(ss >> j) eli lukeminen virrasta ei enää onnistu, se ei onnistu myöheminkään while(ss >> ylimääräinen_merkki). Ei auta, vaikka merkki ei ole int.

Toisaalta voisi ajatella, että vaikka int:in lukeminen ei onnistu, char:in lukeminen voisi kuitenkin onnistua.

Millähän keinolla tilanteessa voisi tarkistaa, onko virrassa vielä ylimääräisia merkkejä sen jälkeen, kun viimeisen int:in lukeminen on onnistunut. Ehkä joutuu try -rakenteisiin :(

Muokk. 2

Tekoäly kertoi, että

Lainaus
to test whether a stream has reached the end or encountered a bad character, use the stream status functions such as .eof(), .fail(), .bad(), and .good(). The .eof() function checks if the end of the stream has been reached, .fail() detects input failures (such as reading unexpected characters), and .bad() indicates a serious error that makes the stream unusable.

joten asia varmaan ratkeaa.
 

Sivuja: [1] 2 3 ... 46