2016-09-26 3 views
-8

Мне нужно распечатать две разные строки, но это сбой! Итак, я думаю, что я просто что-то пропустил в программировании, но я новичок, и я не знаю, что! Вот код:C программирование printf

#include <stdio.h> 
#include <conio.h> 

int main(void) 
{ 
    char nome1,nome2; 
    int num1,num2; 
    printf("inserisci il nome del primo giocatore "); 
    scanf("%s",&nome1); 
    printf("inserisci il nome del secondo giocatore "); 
    scanf("%s",&nome2); 
    printf("i giocatori sono: %s,%s", nome1,nome2); 
    getch(); 
    return 0; 
} 
+2

Если ваш вход не является пустой строкой, то 'зсапЕ()' s экспонат неопределенное поведение для доступа за пределы. – EOF

+0

попробуйте использовать '% c' вместо'% s' – Hackerman

+0

Подробнее о [Переполнение буфера] (https://en.wikipedia.org/wiki/Buffer_overflow) – Mirakurun

ответ

1

Вам необходимо выделить некоторое хранилище для переменных, которые вы определили nome1, nome2

Таким образом, вместо того, чтобы это так:

char nome1,nome2; 

выделить память к этим переменным

char nome1[100],nome2[100]; 

Moreove г, чтобы предотвратить переполнение буфера, используйте fgets вместо scanf:

fgets(nome1, 100, stdin); 

Таким образом, ваш код будет как:

#include <stdio.h> 
#include <conio.h> 
#include <string.h> 

int main(void) 
{ 
    char nome1[100],nome2[100]; 
    int num1,num2; 
    printf("inserisci il nome del primo giocatore "); 
    fgets(nome1, 100, stdin); 
    printf("inserisci il nome del secondo giocatore "); 
    fgets(nome2, 100, stdin); 
    strtok(nome1, "\n"); //removing the newline. 
    printf("i giocatori sono: %s,%s", nome1,nome2); 
    getch(); 
    return 0; 
} 
+1

Не забудьте удалить новую строку. – Barmar

+0

@ Бармар, добавлено :) –

Смежные вопросы