Вот код программы на Си Code: #include <stdio.h> #include <stdlib.h> main() { int c; int nl=0; while ((с = getchar()) != EOF) if (c == '\n') ++nl; printf("%d\n", nl); system("pause"); } пишет ошибку Ошибка 1 error C2065: с: необъявленный идентификатор Ошибка 2 IntelliSense: идентификатор "с" не определен в чём ошибка?
c другой раскладкой написал))))) омг)) Code: #include <stdio.h> #include <stdlib.h> int main() { int c; int nl=0; while (c = getchar()!= EOF) if (c == '\n') ++nl; printf("%d\n", nl); system("pause"); } работает?
хахахаха ну я б*я дурак щас сам проверил всё норм баротает хахах спасибо)) а то долго бы я ещё парился)))
Вот ещё программа (из примера книжки) Code: #include <stdio.h> /* подсчет вводимых символов; 1-я версия */ main() { long nc; nc = 0; while (getchar() != EOF) ++nc; printf(“%ld\n”, nc); } ввожу в консоли символы и она нечего не считает(не выводит nl), в чём может быть проблема?
#include <iostream> using namespace std; main() { long nc; nc = 0; while (getchar()!= '\n') ++nc; cout<<nc<<endl; }
Доброго времени суток! На этот раз обращаюсь с такой проблемой: не пересылается все сообщение. Присылается только первый символ вне зависимости от размера буфера. Клиент написан на с использованием mfc а сервер - winapi. исходники лежат тут: исходник подскажите пожалуйста в чем проблема, потому что сам не разберусь(
Code: ... recv(clientSocket, buff, 20, 0); ... В этом месте явная неточность. Функция вызывается один раз, и она совершенно не обязательно прочитает все (т.к возможны сбои в передаче и т д). Правильно было бы сделать так: Code: char answer[256] = ""; while(recv(clientSocket, buff, 19, 0)) strcat(answer,buff);
Ты знаешь, что такое переполнение буфера? Ты знаешь, что в случае ошибки recv может вернуть -1? Ты знаешь, что recv может считывать не только текстовые, но и бинарные данные, поэтому не стоит полагаться на strcat?
ну переполнения буфера там нет ибо посылаю я только 5-6 символов, да и на клиенте проверка стоит. а вот на счет бинарных данных не совсем понял - я же посылаю только текстовые.
Это были вопросы к awdrg. И тем не менее, если приложение где-то в сети вертеться будет, не стоит полагаться на то, что "мне будут присылать всегда только текст". Сам исходник не смотрел, не переношу MFC) Хотя есть подозрение, что пересылается-то всё, просто ты выводишь юникодную строку с помощью std::cout. Надо бы использовать std::wcout.
Скажем так, мой вариант более рабочий чем самый первый, это все что нужно автору вопроса. Захочет узнать глубже - почитает.
ага, попробую, спасибо. а вот еще вопрос: у меня дома роутер, и если я сокеты пытаюсь подключить используя внешний ип то SOCKET_ERROR при connect(). если же использую 127.0.0.1 или локальный у меня в сети то все ок. вопрос: как избавиться от проблемы? я так понимаю, что всему виной роутер, или нет? ЗЫ: тов. awdrg, не работает Ваш исходник( ЗЫЫ: кстати, массив похоже пересылается либо весь, либо отчасти весь, ибо когда после посылки строки close я делаю: if(strcmp(buff, "c") == 0) break; то проверка не проходит => в массиве все-таки содержится не просто c, а что-то еще.
Научись дебажить программы, в Visual Studio же пишешь. Ставишь брейкпоинт на recv, выполняешь шаг, смотришь, что в буфере лежит, смотришь, что вернула recv (сколько байт принято, то бишь). Простейшая же задача, а решить не можешь. Тем более, отсылаешь Unicode, а в сервере используешь функции для работы с ANSI. Естественно, код товарища awdrg для юникода не будет работать.
спасибо за совет, выяснил что массив у меня присылается таким образом(предположим я отправил строку text): [0] = "t" [1] = 0 [2] = "e" [3] = 0 [4] = "x" [5] = 0 [6] = "t" в результате чего такое вот происходит?
Я уже в третий раз пишу, что это UNICODE. Открывай гугл или википедию, и читай, в чем отличие Unicode от ANSI. Сразу поймешь.
А ещё лучше бы не просто узнать что такое Unicode, но и что такое WideChar-строки и UTF8-строки. В этих вещах нужно плавать как рыба в воде.
Доброго времени суток еще раз! Суть проблемы вот в чем: мне необходимо из реестра вытащить имя процессора. Вот мой код: Code: HKEY hKey; res = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0", 0, KEY_QUERY_VALUE, &hKey); if(res != ERROR_SUCCESS) cout << "RegOpenKeyEx() failed with code " << res << endl; res2 = RegQueryValue(hKey, "ProcessorNameString", proc, (long*)1024); if(res2 != ERROR_SUCCESS) cout << "RegQueryValue() failed with code " << res2 << endl; так вот при таком раскладе оно пишет мне RegQueryValue() failed with code 2. однако я точно знаю что поле ProcessorNameString у меня есть. пробовал дебагить и обнаружил одну странную вещь(хотя может так и должно быть ): когда навожу курсор на hKey в ф-ции RegQueryValue, оно мне показывает что CXX0030: Error: expression cannot be evaluated. я так подозреваю что тут что-то не так. что же я не правильно сделал? ЗЫ: в гугле я искал, везде пишут что с указателями проблема при такой ошибке: там память не выделил, там еще что-то. но тут вроде такого нет.
а как сделать программу что по нажатие клавиши он она будет шифровать текст по определенному алгоритму???(ввод в Memo) это консольная прога,как перебазировать этот скрипт в форму билдера? #include <stdio.h> #include <conio.h> #include <condefs.h> int main() { char str[]="любой текст"; int i=0; while (str!='\0') { printf("%c", str[i++]^100); if (str=='\0') break; printf("%c", str[i++]|10); if (str=='\0') break; printf("%c", str[i++]&400); if (str=='\0') break; } printf("\n"); getch(); return 0; }