Forum Sveta kompjutera

Nazad   Forum Sveta kompjutera > Test Run > Programiranje
Uputstvo Članstvo Kalendar Današnje poruke Pretraži

Programiranje Programski jezici, tehnike, alatke...

Odgovor
 
Alatke vezane za temu Vrste prikaza
Stara 26.9.2015, 0:54   #1
The Majk
Član
 
Član od: 5.12.2014.
Poruke: 100
Zahvalnice: 0
Zahvaljeno jedanput na jednoj poruci
Određen forumom Pitanje iz C++ u Visual Studio?

Zasto scanf ne radi u Visual Studio. Radio zilion puta u linuxu doduse C ali i C++ je isto samo njegovo prosirenje? Dakle prijavi gresku na na compajliranju kad koristim scanf evo koda:

#include "stdafx.h"
#include <stdio.h>


int main()
{
int n=10;


for (int i = 0; i < 40; i++)printf("-");
printf("\n\nHello world\n\n");
for (int i = 0; i < 40; i++)printf("-");
printf("\n");

scanf("%d", n);

printf("\n");
printf("\n");
printf("\n");


printf("You enter %d", n);

printf("\n");
printf("\n");
printf("\n");



return 0;

}

evo ispravljen kod ali sad nece da ispise uno sto unesem moze pomoc?evo koda:

#include "stdafx.h"
#include <stdio.h>


int main()
{
int n=10;


for (int i = 0; i < 40; i++)printf("-");
printf("\n\nHello world\n\n");
for (int i = 0; i < 40; i++)printf("-");
printf("\n");

scanf_s("%d", n);

printf("\n");
printf("\n");
printf("\n");


printf("You enter %d", n);

printf("\n");
printf("\n");
printf("\n");



return 0;

}

Poslednja ispravka: The Majk (26.9.2015 u 0:56) Razlog: proverio kod i ispravio gresku koju je sugerisao visual studio
The Majk je offline   Odgovor sa citatom ove poruke
Stara 26.9.2015, 3:17   #2
RexGrammer
Starosedelac
 
Član od: 18.7.2012.
Lokacija: Beograd, Srbija
Poruke: 1.258
Zahvalnice: 105
Zahvaljeno 238 puta na 210 poruka
Određen forumom Re: Pitanje iz C++ u Visual Studio?

Predkompajler (predprocesor) prijavljuje gresku, a ne kompajler. Da iskljucis upozorenja, koristi sledecu direktivu:

Kod:
_CRT_SECURE_NO_WARNINGS
A kod ti nece raditi ni u jednom slucaju jer za scanf moras koristiti adresni operator (&) da bi ucitao vrednost u promenjive, znaci:

Kod:
scanf("%d", &n);
RexGrammer je offline   Odgovor sa citatom ove poruke
Stara 26.9.2015, 14:58   #3
The Majk
Član
 
Član od: 5.12.2014.
Poruke: 100
Zahvalnice: 0
Zahvaljeno jedanput na jednoj poruci
Određen forumom Re: Pitanje iz C++ u Visual Studio?

Citat:
RexGrammer kaže: Pregled poruke
Predkompajler (predprocesor) prijavljuje gresku, a ne kompajler. Da iskljucis upozorenja, koristi sledecu direktivu:

Kod:
_CRT_SECURE_NO_WARNINGS
A kod ti nece raditi ni u jednom slucaju jer za scanf moras koristiti adresni operator (&) da bi ucitao vrednost u promenjive, znaci:

Kod:
scanf("%d", &n);
E hvala ucio sam programiranje davno i sad uzeo da ponovim i mozda da se time bavim ali dosta sam zaboravio. Hvala!
The Majk je offline   Odgovor sa citatom ove poruke
Stara 26.9.2015, 17:52   #4
Neutrino
Deo inventara foruma
 
Član od: 17.6.2011.
Poruke: 7.336
Zahvalnice: 94
Zahvaljeno 3.334 puta na 2.010 poruka
Određen forumom Re: Pitanje iz C++ u Visual Studio?

Citat:
RexGrammer kaže: Pregled poruke
A kod ti nece raditi ni u jednom slucaju jer za scanf moras koristiti adresni operator (&) da bi ucitao vrednost u promenjive, znaci:

Kod:
scanf("%d", &n);
Ne mora uvek. Ako promenjljiva već sadrži adresu & operator nije potreban.

Konkretan primer.
Kod:
    char name[50];
    scanf("%s", name);
    printf("%s", name);
U C/C++ svaka promenljiva koja definiše niz automatski sadrži adresu prvog člana niza. Zato u primeru nije potreban &. Situacija je još izraženija kad se radi direktno sa pokazivačima.
Neutrino je offline   Odgovor sa citatom ove poruke
Stara 27.9.2015, 10:44   #5
Teva
Starosedelac
 
Član od: 23.2.2006.
Lokacija: Tamo gde su kuće od čokolade i prozori od marmelade....
Poruke: 1.579
Zahvalnice: 195
Zahvaljeno 301 puta na 171 poruka
Određen forumom Re: Pitanje iz C++ u Visual Studio?

U prevodu, scanf prima adresu gde će smestiti podatke...

Dal ćeš koristiti operator referenciranja (&) ili ćeš proslediti direktno pokazivač (što je opet adresa u memoriji) je apsolutno svejedno, dok god scanf dobije adresu.

Problem nastaje ako imaš int n = 5; (obično neki junk ili 0, al nek bude 5).

scanf("%d", n); je validan poziv i neće se buniti kompajler.

Zašto?

Jer je pokazivač u principu celobrojna vrednost sa brojem "ćelije" u memoriji. I taj poziv će na memorijsku lokaciju br 5 da upiše šta god pročita. Problem je jer će se desiti nedefinisano ponašanje, možda pukne, usled neuspešnog upisa a možda upiše 5icu tamo gde ne bi trebao. Uglavnom sevne segmentation ali nije nemoguće da ti prođe i napravi kuršlus kasnije.


Stim što kada koristiš pokazivače, pazi dobro šta radiš, priroda im je takva da mogu da ti proizvedu ogromnu glavobolju vrlo lagano
Teva je offline   Odgovor sa citatom ove poruke
Stara 27.9.2015, 12:28   #6
The Majk
Član
 
Član od: 5.12.2014.
Poruke: 100
Zahvalnice: 0
Zahvaljeno jedanput na jednoj poruci
Određen forumom Re: Pitanje iz C++ u Visual Studio?

kada korstim u ovom kodu sa vasom ispravkom scanf prijavi gresku a kad koristim scanf_s prodje kompajler i sve radi a secam se kad sam ucio programiranje da sam radio scanf za ispis na ekran mze objasnjenje sto visual studio priajvi gresku?
The Majk je offline   Odgovor sa citatom ove poruke
Odgovor

Bookmarks sajtovi


Vaš status
Ne možete postavljati teme
Ne možete odgovarati na poruke
Ne možete slati priloge uz poruke
Ne možete prepravljati svoje poruke

BB kod: uključeno
Smajliji: uključeno
[IMG] kod: uključeno
HTML kod: isključeno


Slične teme
tema temu započeo forum Odgovora Poslednja poruka
Vicevi Oblivion Cvet kompjutera 5481 27.5.2022 5:52
Visual Studio 2013 CoFigamer Programiranje 49 4.4.2015 10:35
Ulead Video Studio 10 | Pitanje Hakinen92 Video/TV softver 0 17.7.2011 10:38
Potrebna knjiga za Visual Studio 2010 !!! PRO_MILE Programiranje 16 3.12.2010 13:57
Microsoft Visual Studio 2008 WoLwErInE_RuSkI Programiranje 1 18.6.2009 13:41


Sva vremena su po Griniču +2 h. Sada je 16:51.


Powered by vBulletin® verzija 3.8.7
Copyright ©2000–2024, vBulletin Solutions, Inc.
Hosted by Beograd.com