я продолжаю получать ошибки, связанные с типом - PullRequest
0 голосов
/ 30 октября 2019

Я пишу эту программу для домашней работы и продолжаю получать ошибки типа. Насколько мне известно,% d читает целое число, которое в данном случае является переменной x, а% lf читает двойную «переменную f»

Я пытался удалить «\ n» в функции scanf (), как это было запрошено вдругие вопросы

int x=0;
int l=0;
double f=0;
printf("Geben Sie eine ganze Zahl");
scanf("%d",x);
printf("Geben Sie eine reele Zahl");
scanf("%lf",f);
l=-1;
char r[1]="";
char s[1]="";
  while(l !=1){
    printf("Geben Sie ein Zeichen");
    scanf("%s",r);
    l=strlen(r);
}
return 0;

Ошибки:

C:/Users/---(9): warning in format string of scanf(): the conversion %d expects type int* but given type is int (argument 1).
C:/Users/---(11): warning in format string of scanf(): the conversion %lf expects type double* but given type is double (argument 1).

Ответы [ 2 ]

5 голосов
/ 30 октября 2019

Это как предупреждение говорит: функция ожидает указателей на типы, которые вы ей даете. Исправьте это, поместив & перед переменной, что заставит его вместо этого передать адрес:

printf("Geben Sie eine ganze Zahl");
scanf("%d", &x);
printf("Geben Sie eine reele Zahl");
scanf("%lf", &f);

Существует также проблема с тем, как вы читаете в символах. Это здесь

char r[1] = "";
char s[1] = "";

Создает два массива, которые не содержат ничего, кроме нулевого терминатора. У него нет возможности читать непустую строку, которую вы здесь делаете:

scanf("%s", r);

Неясно, пытаетесь ли вы прочитать целую строку или просто символ,как ваш вывод подразумевает. Только для одного символа ваш код должен выглядеть следующим образом:

char r;
scanf("%c", &r);

И для всей строки:

char r[20]; // can hold 19 chars plus a null terminator
scanf("%19s", r);

Настройте эти размеры в соответствии с длиной строки, которая вам нужна. читать.

0 голосов
/ 30 октября 2019

scanf() требует адрес памяти переменной для присвоения значения. и вам нужно указать адрес с амперсандом перед переменной, как &variable. В этом проблема. Но при работе со строками это вам не нужно, помните, что строки - это массив символов. Поэтому при обращении к строке вы не обращаетесь к переменной, вы даете первый индекс массива. Так что вы не добавляете туда амперсанд.

int x=0;
int l=0;
double f=0;

printf("Geben Sie eine ganze Zahl");

scanf("%d",&x);

printf("Geben Sie eine reele Zahl");

scanf("%lf",&f);

l=-1;
char r[1]="";
char s[1]="";
while(l !=1){
    printf("Geben Sie ein Zeichen");
    scanf("%s",r);
    l=strlen(r);
}
return 0;

и почему вы берете 1 символ в качестве строки? Вы можете просто сделать это так

char r='';
while( r==''){
     scanf("%c",&r);
}
...